【问题标题】:Laravel resource controller method not invokedLaravel 资源控制器方法未调用
【发布时间】:2018-06-04 07:35:11
【问题描述】:

我有控制器 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');

谁能解释框架的这种行为?

【问题讨论】:

  • 你可以去.env文件并设置APP_DEBUG=true然后试试。你会得到确切的错误。
  • 你的'leads/attributes' uri 最终调用了'LeadController@show',所以最好用一些不同的前缀替换
  • @HassanRaza 我正在使用开发环境,调试选项设置为 true
  • @Purvesh 你是对的。

标签: laravel controller routing laravel-5.6


【解决方案1】:

解决这个问题的方法是将 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 方法,而不是正确的嵌套资源。

【讨论】:

  • 谢谢,但我需要知道原因。问题中已经提到了这一点。
  • @BirendraGurung 我已经为我的答案添加了解释,如果您仍然坚持,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 2014-12-19
  • 2020-12-09
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
相关资源
最近更新 更多