【问题标题】:Laravel, cannot delete item from modelLaravel,无法从模型中删除项目
【发布时间】:2025-11-24 17:40:01
【问题描述】:

我在ImageController.php中有以下内容:

public function destroy($id)
{
    $image = Image::find($id);
    $image->delete();
    return Response;
}

在 route/web.php 中:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Image;    
Route::resource('image', 'ImageController');

但是当使用 Postman for Chrome 向http://localhost:8000/image/5 发送DELETE 请求(当前使用GET 时返回图像)时,图像不会从服务器中删除。

我做错了什么?

编辑,错误日志:

Whoops, looks like something went wrong.

1/1
TokenMismatchException in VerifyCsrfToken.php line 68:
in VerifyCsrfToken.php line 68
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 561
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520
at Router->dispatchToRoute(object(Request)) in Router.php line 498
at Router->dispatch(object(Request)) in Kernel.php line 174
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 54
at require_once('/Users/sahandz/Documents/School/Singapore/CS3226/retellgram-master 2/backend/public/index.php') in server.php line 21

【问题讨论】:

  • 使用应用\图片;定义?
  • 有什么错误吗?对请求的响应是什么?
  • 错误日志已添加到问题中。
  • 使用应用\图片;在 Imagecontroller 文件中完成

标签: php laravel model eloquent


【解决方案1】:

要解析TokenMismatchException,您需要执行以下任一操作:

  1. 连同您的邮递员删除请求,在请求正文中以_token 或在请求标头中以X-CSRF-TOKEN 形式发送csrf 令牌
  2. 将删除请求更改为获取删除请求。在 Laravel 中,所有的 get 请求都被视为读取请求,因此不会执行 CSRF 令牌验证。请注意,这会禁用此路由的 CSRF 保护
  3. 在您的app/Http/Kernel.php 文件中,注释掉\App\Http\Middleware\VerifyCsrfToken::class 行以删除CSRF 验证。请注意,这会禁用所有网络路由的 CSRF 保护

【讨论】:

  • 您好,感谢您的回答。那么,如果我想做替代方案 1,我是否将 X-CSRF-TOKEN 写为标题中的键或值?如果您查看 Postman UI,您会看到在标题选项中有一个 key 和一个 value 字段。每一个我都写什么?
  • X-CSRF-TOKEN 将是关键,您需要设置一个获取值的路径。然后将其复制粘贴到此请求的值中
  • 您能否详细说明“设置一个吐出价值的获取路线”?我对此完全陌生。
  • 只需像这样添加一条路线:Route::get('ping', function() { return csrf_token();});。然后访问路由,复制值并在您的邮递员中使用此令牌作为标题以测试您的删除路由