【问题标题】:RESTful and Resource Controllers in Laravel 4 and 5Laravel 4 和 5 中的 RESTful 和资源控制器
【发布时间】:2016-05-21 18:29:44
【问题描述】:

Laravel 4 中的 RESTful 和资源控制器受到限制,即 RESTful 方法名称必须以 get、put、post、patch、delete 结尾,而资源控制器必须以 index、create、store、show edit、update、destroy 结尾。我的问题是 Laravel 5 是否施加了相同的限制?

【问题讨论】:

  • 即使在 laravel 4 也没有限制。您可以根据需要添加任意数量的路由。 Laravel route::resource 只是为了帮助您编写更清晰的代码,而不是您需要逐个键入它们并根据一般 API 需要生成。

标签: php laravel laravel-4 laravel-5


【解决方案1】:

前言

在本机上,是的,确实如此。阅读here。但是如果你想要一些不同的东西,我给你一个技巧来做到这一点。首先,您可以创建自己的ResourceRegistrar。我的是[位于app/Routing/ResourceRegistrar.php]:

namespace App\Routing;

use Illuminate\Routing\ResourceRegistrar as BaseRegistrar;

class ResourceRegistrar extends BaseRegistrar
{
}

然后在你的服务提供商中注册你自己的RouteRegistrar

$this->app->bind('Illuminate\Routing\ResourceRegistrar', 'App\Routing\ResourceRegistrar');

注意:我通过register方法在App\Providers\AppServiceProvider中注册了我自己的RouteRegistrar

示例

我在routes.php 中添加了自己的资源控制器,如下所示:

Route::resource('photo', 'PhotoController');

所以,我应该有一个PhotoController 来处理这个请求。

实施

我们知道,对“/photo”的GET 请求将由PhotoController@index 方法处理,要将您的photo:index 操作修改为photo:root 操作,请将您的ResourceRegistrar 修改为如下所示:

namespace App\Routing;

use Illuminate\Routing\ResourceRegistrar as BaseRegistrar;

class ResourceRegistrar extends BaseRegistrar
{
    protected function addResourceIndex($name, $base, $controller, $options)
    {
        $uri = $this->getResourceUri($name);

        $action = $this->getResourceAction($name, $controller, 'root', $options);

        return $this->router->get($uri, $action);
    }
}

所以现在GET 对'/photo' 的请求将由PhotoController@root 方法处理。

备忘单

Verb      | Path                  | Method to modify  |
----------|-----------------------|-----------------  |
GET       | `/photo`              | addResourceIndex  |
GET       | `/photo/create`       | addResourceCreate |
POST      | `/photo`              | addResourceStore  |
GET       | `/photo/{photo}`      | addResourceShow   |
GET       | `/photo/{photo}/edit` | addResourceEdit   |
PUT/PATCH | `/photo/{photo}`      | addResourceUpdate |
DELETE    | `/photo/{photo}`      | addResourceDestroy|

ResourceRegistrarhere的基本代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2014-08-02
    相关资源
    最近更新 更多