Laravel路线返回404

时间:2018-10-24 19:58:21

标签: laravel laravel-5

我盯着一个看起来很简单的问题。我在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页。因此,必须与其他路线发生冲突。如果我将“对象/网格”更改为“对象/网格”,则它可以工作。

在这里欢迎第二双眼睛。

1 个答案:

答案 0 :(得分:2)

您只需要更改路由文件的顺序即可:

Route::get('objects/grid','ObjectController@grid')->name('objects.grid');
Route::resource('objects', 'ObjectController');

路由资源应放在路由列表的底部。这是因为GET对象/ {object}与GET对象/网格甚至对象/创建之间没有区别。如果要查找路线对象/网格,并且对象/ {object}在列表中位于较高位置,则将假定grid是{object}并转到该路线。