【问题标题】:Laravel Route::controller with additional parametersLaravel Route::controller 附加参数
【发布时间】:2014-11-17 09:29:40
【问题描述】:

我正在尝试找出是否有办法将 url 参数添加到 Route::controller 调用中。

我目前的控制面板是:

Route::group(
    [
        'prefix' => 'admin',
        'namespace' => 'Admin'
    ],
    function() {

        Route::group(
            [
                'prefix' => '',
                'before' => 'auth.admin'
            ],
            function() {

                Route::controller('page', 'PageController');

                Route::controller('article', 'ArticleController');

            }

        );

        Route::controller('/', 'LoginController');

    }
);

现在 - 每个控制器都将具有 post / getEdit 操作,这将需要以 /admin/page/edit/{id} 的简单格式传递 url id 参数。

我的问题是 - 有没有办法向 Route::controller 方法添加一些参数,还是我必须使用 Route::get / Route::post 方法来完成它们?

我知道我可以通过在给定的控制器调用上方添加两个带有 getpost 的额外案例来做到这一点:

Route::group(
    [
        'prefix' => 'admin',
        'namespace' => 'Admin'
    ],
    function() {

        Route::group(
            [
                'prefix' => '',
                'before' => 'auth.admin'
            ],
            function() {

                Route::get('page/edit/{id}', 'PageController@getEdit');
                Route::post('page/edit/{id}', 'PageController@postEdit');

                Route::controller('page', 'PageController');

                Route::controller('article', 'ArticleController');

            }

        );

        Route::controller('/', 'LoginController');

    }
);

但也许有更好的方法?


【问题讨论】:

    标签: laravel-4 laravel-routing


    【解决方案1】:

    你可以使用Route::resource:

    Route::resource('resource', 'ResourceController');
    

    这将注册以下路由:

    GET       /resource                 index   resource.index
    GET       /resource/create          create  resource.create
    POST      /resource                 store   resource.store
    GET       /resource/{resource}      show    resource.show
    GET       /resource/{resource}/edit edit    resource.edit
    PUT/PATCH /resource/{resource}      update  resource.update
    DELETE    /resource/{resource}      destroy resource.destroy
    

    您可以将它与onlyexcept 一起使用来选择要包含(或排除)的路由:

    Route::resource('resource', 'ResourceController', ['only' => ['index', 'show', 'update', 'destroy']]);
    

    Laravel documentation 中阅读更多关于 RESTful 资源控制器的信息。

    这篇文章可能也很有趣:Laravel 4 - Route::resource vs Route::controller. Which to use?

    【讨论】:

    • 所以我认为 - resource 将用于传递给定记录的 id。谢谢。
    • 是的,{resource} 是记录的标识符并传递给控制器​​。
    猜你喜欢
    • 2018-09-26
    • 2015-01-09
    • 2014-06-23
    • 2014-06-08
    • 2020-01-27
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多