在 Show 和 create 路线之间有所不同

Posted

技术标签:

【中文标题】在 Show 和 create 路线之间有所不同【英文标题】:Make a difference between Show and create routes 【发布时间】:2017-05-21 14:43:31 【问题描述】:

我有所有这些路线:

Route::resource('tournaments', 'TournamentController');

在 TournamentController 中,我有:

public function __construct()

    $this->middleware('auth')->except('show');

但是当我转到 http://laravel.dev/tournaments/create 时,Laravel 认为 create 是锦标赛的障碍(比如 http://laravel.dev/tournaments/my-tournament/ )并将我发送到 @show 而不是 @create。

在这种情况下,我从 SubstituteBindings 中间件得到一个未找到模型...

这个我不是很懂,怎么避免这种混淆???

编辑:还有我的路线列表:

POST      | tournaments                                                                   | tournaments.store          | App\Http\Controllers\TournamentController@store                            | web,ownTournament,auth          |
GET|HEAD  | tournaments                                                                   | tournaments.index          | App\Http\Controllers\TournamentController@index                            | web,auth                        |
GET|HEAD  | tournaments/create                                                            | tournaments.create         | App\Http\Controllers\TournamentController@create                           | web,ownTournament,auth          |
GET|HEAD  | tournaments/deleted                                                           |                            | App\Http\Controllers\TournamentController@getDeleted                       | web,ownTournament,auth          |
GET|HEAD  | tournaments/tournament                                                      | tournaments.show           | App\Http\Controllers\TournamentController@show                             | web                             |
PUT|PATCH | tournaments/tournament                                                      | tournaments.update         | App\Http\Controllers\TournamentController@update                           | web,ownTournament,auth          |
DELETE    | tournaments/tournament                                                      | tournaments.destroy        | App\Http\Controllers\TournamentController@destroy                          | web,ownTournament,auth          |
GET|HEAD  | tournaments/tournament/edit                                                 | tournaments.edit           | App\Http\Controllers\TournamentController@edit                             | web,ownTournament,auth          |

编辑:现在我在另一条路线上遇到了同样的问题:

Route::get('/tournaments/deleted', 'TournamentController@getDeleted');

我得到了 SubstituteBindings Middleware 找不到的模型。

我猜 Middle 正在尝试将 delete 解析为锦标赛名称...

案件重开!

【问题讨论】:

TournamentController里面有没有对应的方法比如(create,show,edit...) ? 是的,我愿意!我有索引、创建、存储、显示、编辑、更新、销毁等 2 个功能 您不需要路线名称! laravel 完全按照你的方式命名它们!尝试删除它们并再次测试 如果您将路由定义为资源路由,则无需指定所有名称。当您执行Route::resource('tournaments') 时,您可以使用tournaments.AnyMethodInController 访问其所有方法。 我删除了所有名字,但问题仍然存在 【参考方案1】:

我发现了问题。我有这条路线:

Route::get('tournaments/tournament', 'TournamentController@show')->name('tournaments.show'); 

在我的路由文件的开头。

我的错!我在这里为遇到同样问题的人提供答案!

【讨论】:

以上是关于在 Show 和 create 路线之间有所不同的主要内容,如果未能解决你的问题,请参考以下文章

car的旅行路线

同捆不同路线

C语言-知识点及学习路线

算法-图中两个点之间的路线(深搜或者广搜)

在 Create React App 中使用 React Router 排除生产路线

Google Directions API 返回不同的 waypoint_order 和 leg