14

我了解资源控制器可以具有以下方法

index
show
create
edit
store
update
destroy

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

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

资源控制器对上述功能无用吗?如果对 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');
    });
});

或者我应该忘记资源控制器并使用一个宁静的控制器吗?

4

2 回答 2

32

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

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

PS我通常会回避使用Route::controller(). 太模棱两可了

于 2013-09-30T19:56:03.627 回答
1

与资源控制器相关的问题之一是当您使用命名路由时,如果使用组前缀,这一切都会变得一团糟。如果您想对前缀进行小幅更改,则必须在整个视图和控制器中进行更改。即你不能充分利用命名路线

我在开发我的 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))
于 2014-12-24T11:14:20.323 回答