在 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 路线之间有所不同的主要内容,如果未能解决你的问题,请参考以下文章