我盯着一个看起来很简单的问题。我在web.php文件中定义了以下路由。
Route::resource('objects', 'ObjectController');
Route::get('objects/grid','ObjectController@grid')->name('objects.grid');
这将产生以下路线列表:
MACBOOKPRO:laravel-test user$ php artisan route:list
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | objects | objects.index | App\Http\Controllers\ObjectController@index | web |
| | POST | objects | objects.store | App\Http\Controllers\ObjectController@store | web |
| | GET|HEAD | objects/create | objects.create | App\Http\Controllers\ObjectController@create | web |
| | GET|HEAD | objects/grid | objects.grid | App\Http\Controllers\ObjectController@grid | web |
| | DELETE | objects/{object} | objects.destroy | App\Http\Controllers\ObjectController@destroy | web |
| | GET|HEAD | objects/{object} | objects.show | App\Http\Controllers\ObjectController@show | web |
| | PUT|PATCH | objects/{object} | objects.update | App\Http\Controllers\ObjectController@update | web |
| | GET|HEAD | objects/{object}/edit | objects.edit | App\Http\Controllers\ObjectController@edit | web |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
转到http://localhost:8000/objects/grid确实会返回404页。因此,必须与其他路线发生冲突。如果我将“对象/网格”更改为“对象/网格”,则它可以工作。
在这里欢迎第二双眼睛。
答案 0 :(得分:2)
您只需要更改路由文件的顺序即可:
Route::get('objects/grid','ObjectController@grid')->name('objects.grid');
Route::resource('objects', 'ObjectController');
路由资源应放在路由列表的底部。这是因为GET对象/ {object}与GET对象/网格甚至对象/创建之间没有区别。如果要查找路线对象/网格,并且对象/ {object}在列表中位于较高位置,则将假定grid是{object}并转到该路线。