Laravel路由:嵌套的Route :: group

时间:2014-09-22 09:22:43

标签: php laravel-4 routing

我知道这里有门票,这些门票正在谈论类似的情况,但我找不到能满足我情况的答案。

我试图执行以下操作:

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看起来像这样:

命名空间Admin;

使用BaseController; 使用View;

class PageController extends BaseController {



    public function getIndex() {

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

    }



} 

2 个答案:

答案 0 :(得分:2)

我只是想通过在您的路由中明确指出 - 仅使用Route::get/post/delete etc而不是Route::controllerRoute::resource - 您可以避免此类问题以及其他许多问题。 Route::controller尤其被视为不良行为。

答案 1 :(得分:0)

好的 - 经过一段时间的试验后,答案似乎是按照您将电话放入群组的顺序。

当我在嵌套组后调用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');

    }
);

遗憾的是,这样一个重要的方面并没有记录在任何地方 - 尽管如此 - 它有效!