1

我在 laravel 中使用资源,我想要一个自定义 uri 路由来执行(显示)操作,我的路由是:

Route::resource('/admin/users', 'UsersController')->except(['show']);
Route::get('/admin/users/{user}/show', 'UsersController@show')->name('users.show');

我检查了一个测试网址,但没有在这条路线中显示错误 404,例如:

http://127.0.0.1:8000/admin/users/test

显示此错误

The GET method is not supported for this route. Supported methods: PUT, PATCH, DELETE.

当我删除代码 except(['show']) 我的代码工作正常并显示 404 错误但我的 Route List Show Two Route for show action

|        | GET|HEAD  | backend/users/{user}      | backend.users.show 
|        | GET|HEAD  | backend/users/{user}/show | backend.users.show 
4

4 回答 4

1

您的两个路由 URI 模式相同,因此您需要在路由之前定义resource路由:

Route::get('/admin/users/{user}/show', 'UsersController@show')->name('users.show');
Route::resource('/admin/users', 'UsersController')->except(['show']);
于 2020-08-14T14:58:02.217 回答
0

尝试替换except(['show'])

  ->only(['index', 'create', 'store', 'update', 'destroy'])

这在你的情况下会很好用。

于 2020-08-14T19:33:18.530 回答
0

我找到了解决这个问题的方法

编辑此文件:

/app/Exceptions/Handler.php

添加这一行

use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;

public function render($request, Throwable $exception)
{
if ($exception instanceof MethodNotAllowedHttpException) 
         {
        abort(404);
         }
         return parent::render($request, $exception);
}
于 2020-08-15T16:07:26.723 回答
0

这是因为您的路由不是 404 错误,就像您::resource在创建路由时使用的那样,它使用的路由与使用 and 方法的路由相同,show()update()请求destroy()动词不同。

GET         /photos/{photo}
PUT/PATCH.  /photos/{photo}
DELETE      /photos/{photo}

在文档https://laravel.com/docs/7.x/controllers#resource-controllers中阅读有关此内容的更多信息

当您指定except(['show'])要删除 get 路由但 PUT/PATCH 和 DELETE 方法的路由仍然存在时。

于 2020-08-14T15:00:03.280 回答