我有控制器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');
任何人都可以解释这种框架的行为吗?
答案 0 :(得分:1)
解决这个问题的方法是将LeadsController路由放在组路由下:
Route::prefix('leads')->group(function(){
Route::resource('attributes' , 'LeadAttributesController' , ['as' => 'leads']);
Route::resource('reminders' , 'LeadRemindersController' , ['as' => 'leads']);
});
Route::resource('leads' , 'LeadsController');
您必须这样做的原因是因为leads
节目路线的通配符将接受任何默认值。当laravel收到请求时,它会尝试将其匹配到第一条路径,因为您的leads
资源高于嵌套资源,它将与lead的show方法匹配,而不是正确的嵌套资源。