Метод контроллера ресурсов Laravel не вызван - PullRequest
0 голосов
/ 04 июня 2018

У меня есть контроллеры LeadsController, LeadsAttributesController и LeadsReminderController

Route::resource('leads' , 'LeadsController');
Route::prefix('leads')->group(function(){
    Route::resource('attributes' , 'LeadAttributesController' , ['as' => 'leads']);
    Route::resource('reminders' , 'LeadRemindersController' , ['as' => 'leads']);
});

Когда я перехожу к /leads/attributes, фреймворк должен вызывать функцию индекса, но в этом случае появляется пустая страницаи никакое исключение не показывается.Однако маршрут до /leads/attributes/create работает как надо.

Если маршруты реструктурированы, как показано ниже, то маршрутизация работает нормально

Route::prefix('leads')->group(function(){
    Route::resource('attributes' , 'LeadAttributesController' , ['as' => 'leads']);
    Route::resource('reminders' , 'LeadRemindersController' , ['as' => 'leads']);
});
Route::resource('leads' , 'LeadsController');

Может кто-нибудь объяснить такое поведение платформы?

1 Ответ

0 голосов
/ 04 июня 2018

Чтобы обойти это, нужно поместить маршруты LeadsController в групповые маршруты:

Route::prefix('leads')->group(function(){
    Route::resource('attributes' , 'LeadAttributesController' , ['as' => 'leads']);
    Route::resource('reminders' , 'LeadRemindersController' , ['as' => 'leads']);
});
Route::resource('leads' , 'LeadsController');

Причина, по которой вы должны это сделать, заключается в том, что подстановочный знак для маршрута leads show будет принимать всепо умолчанию.Когда laravel получает запрос, он пытается сопоставить его с первым возможным маршрутом, так как ваш ресурс leads выше ваших вложенных ресурсов, он будет соответствовать методу show, а не правильному вложенному ресурсу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...