没有 id 的 Laravel 资源路由销毁(DELETE)

Posted

技术标签:

【中文标题】没有 id 的 Laravel 资源路由销毁(DELETE)【英文标题】:Laravel Resource Route destroy (DELETE) without id 【发布时间】:2015-04-13 16:01:29 【问题描述】:

是否可以修改 Laravel 的资源路由,以便我可以在没有 ID 的情况下直接使用 destroy 方法?原因是当我在我的 UsersController 上调用 destroy 时,我只想删除当前经过身份验证的用户,而不是传递的 ID。

如果我只是从 destroy 方法中删除 $id 参数,我会收到以下错误:

RouteCollection.php 第 207 行中的 MethodNotAllowedHttpException

我想我可以将$id 留在那里,但我真的不想要求用户在 URI 中传递 id。

谢谢

【问题讨论】:

因为它是“特殊的”(我的意思是,不像 other 资源),我只会为它制作一条专用路线 @watcher 保持一致会很好,但认为这可能是必需的。啊,哦,好吧,谢谢你的意见。 请记住,您的 Routes 文件基本上是您项目的一个文档。为专门的操作设置单独的路线并不一定是坏事。 @watcher 作为 Laravel 的新手,我总是关心每一行代码在“幕后”的作用和效率。显然有些事情我需要克服! :) 感谢您的帮助。 【参考方案1】:

你可以,但你必须为此添加额外的路线:

Route::delete('user', 'UserController@destroyAuthenticated');
Route::resource('user', 'UserController');

然后在你的控制器中是这样的:

public function destroyAuthenticated()
    Auth::user()->delete();

【讨论】:

以上是关于没有 id 的 Laravel 资源路由销毁(DELETE)的主要内容,如果未能解决你的问题,请参考以下文章

LARAVEL - 使用 Route::resource 生成路由时无法使用销毁路由

laravel 路由模型绑定

在 Laravel 中为资源控制器添加新方法

Laravel 5.0 路由模型绑定在销毁操作中不起作用

laravel 路由参数的默认值怎么设置

Laravel 资源存储方法被重定向到销毁方法