Laravel 4 - 路由::资源 vs 路由::控制器.使用哪个


Laravel 4 - Route::resource vs Route::controller. Which to use?

我知道资源控制器可以有以下方法

index
show
create
edit
store
update
destroy

现在假设除了资源操作之外,我还需要执行以下操作:

  • 用户尝试登录。
  • 管理员希望通过电子邮件/名字查找用户
  • 用户通过它的 slug 请求帖子

资源控制器是否对上述功能毫无用处?如果编写 API,我显然想要索引、显示、编辑、创建、销毁......还有登录,查找,搜索等...

是否可以路由到两种类型的控制器?例如

Route::group(['prefix' => 'api'], function() {
    Route::group(['prefix' => 'v1'], function() {
        // Resource Controller
        Route::resource('posts', 'Api'V1'PostsResourceController');
        // Restful Controller
        Route::controller('posts', 'Api'V1'PostsController');
    });
});

还是我应该忘记资源控制器而改用 RESTFUL 控制器?

只需使用资源控制器,将这些其他方法添加到同一控制器,然后直接向这些方法添加路由:

Route::group(['prefix' => 'api'], function()
{
    Route::group(['prefix' => 'v1', 'namespace' => 'Api'V1'], function()
    {
        // Add as many routes as you need...
        Route::post('login', 'PostsResourceController@login');
        Route::get('find',   'PostsResourceController@find');
        Route::get('search', 'PostsResourceController@search');
        Route::resource('posts', 'PostsResourceController');
    });
});

附言我通常回避使用Route::controller().太暧昧了。

资源控制器相关的问题之一是,当您使用命名路由时,带有组前缀时,一切都会变得一团糟。 如果要对前缀进行小的更改,则必须在整个视图和控制器中进行更改。 即您无法充分发挥命名路由的功能。

我在开发我的Laravel应用程序时遵循此模型。

Route::group( [ 'prefix' => 'admin' ], function(){
        Route::resource('pages', 'PageController', [
            'names' => [
                'show' => 'page',
                'edit' => 'page.edit'
            ],
            'only' => [
                'show',
                'edit'
            ]
        ]);
    });

这样我就有以下优点.

  • 只有您需要的路线。
  • 所有网址都明确命名

而且我可以使用语法舒适地生成 URL,即使我更改前缀或资源名称 URL 不受影响

URL::route('page', array($id))