Я знаю, что здесь есть билеты, в которых говорится о похожем сценарии, но я не могу найти ответ, который бы удовлетворил мой случай.
Я пытаюсь сделать следующее:
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 выглядит так:
Администратор пространства имен;
использовать BaseController;
использовать вид;
class PageController extends BaseController {public function getIndex() {
return View::make('Admin.page.index');
}}
Я просто скажу, что, будучи явным в вашей маршрутизации — только используя Route::get/post/delete etc
и не Route::controller
или же Route::resource
— Вы избегаете подобных проблем и многих других. Route::controller
особенно считается плохой практикой.
Хорошо — после того, как вы поэкспериментируете с ним некоторое время, ответ, по-видимому, будет в том порядке, в котором вы выполняете звонки в своей группе.
Когда я перееду, позвоните 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');
}
);
Обидно, что такой важный аспект нигде не задокументирован — тем не менее — он работает!