【问题标题】:Laravel routing : nested Route::groupLaravel 路由:嵌套 Route::group
【发布时间】:2014-11-16 05:07:22
【问题描述】:

我知道这里有票,它们在谈论类似的场景,但我找不到任何可以满足我的情况的答案。

我正在尝试执行以下操作:

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

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


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


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

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


            }
        );


    }
);

当我调用 /admin 时,我得到了 LoginController 并且它是 getIndex() 视图,但是当我调用 /admin/page 时 - 我得到了:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

Controller method not found.

我知道你可以嵌套 Route::group 调用,但它似乎没有很好地记录在任何地方如何实现它。据我了解,您必须为每个 Route::group 调用指定“前缀” - 在嵌套的调用中,我刚刚使用了空白字符串 '' - 因为它不需要任何额外的前缀,除了父前缀。嵌套组中对控制器的封装调用需要admin.auth 过滤器——这就是我想将它们包含在嵌套组中的原因——而不是分别为每个控制器指定过滤器。

知道需要做什么才能使这个场景有效吗?

另外 - 即使我更改代码以便它直接调用父组下的控制器,如下所示:

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

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

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

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

    }
);

当我调用 /admin/page 时,我似乎遇到了同样的错误 - PageController 看起来像这样:

命名空间管理员;

使用基本控制器; 使用视图;

class PageController extends BaseController {



    public function getIndex() {

        return View::make('Admin.page.index');

    }



} 

【问题讨论】:

    标签: php laravel-4 routing


    【解决方案1】:

    我会插话说,通过在您的路由中明确说明 - 仅使用 Route::get/post/delete etc 而不是 Route::controllerRoute::resource - 您可以避免此类问题和许多其他问题。 Route::controller 尤其被认为是不好的做法。

    【讨论】:

    • 这就是我想知道的 - 显然它需要很多行代码,但你可能是对的 - 手动声明所有路由会更清晰。
    【解决方案2】:

    好的 - 在尝试了一段时间后,答案似乎是按照您在小组中拨打电话的顺序。

    当我在嵌套组之后将呼叫移至 Route::controller('/', 'LoginController'); - 然后一切似乎都正常:

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

    很遗憾,如此重要的方面在任何地方都没有记录——尽管如此——它确实有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2015-11-17
      相关资源
      最近更新 更多