Laravel 4 - Route :: resource vs Route :: controller。哪个用?

时间:2013-09-30 19:48:14

标签: php routing laravel laravel-4

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

index
show
create
edit
store
update
destroy

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

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

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

是否可以路由到两种类型的控制器? e.g。

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控制器?

2 个答案:

答案 0 :(得分:32)

只需使用资源控制器add those other methods to that same controller, and add routes to those methods directly

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');
    });
});

P.S。我一般不愿意使用Route::controller()It's too ambiguous

答案 1 :(得分:1)

与资源控制器相关的一个问题是当你使用命名路由时,使用组前缀这一切都变成了一大堆。如果要对前缀进行少量更改,则必须在整个视图和控制器中进行更改。即你无法充分利用命名路线

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

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

        ]);

    });

所以我有以下优点。

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

我可以使用语法轻松生成网址,即使我对前缀或资源名称进行了更改,网址也不会受到影响

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