Symfony \组件\ HttpKernel \ Exception \ MethodNotAllowedHttpException没有消息Laravel DELETE

时间:2018-12-04 13:37:35

标签: php laravel

尝试删除项目时出现此错误。

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException no message

Error screenshot

以下删除项目的途径。

web.php

Route::delete('projects/{project}',['uses'=>'ProjectsController@destroy','as'=>'projects.destroy']);

ProjectsController.php

public function destroy($id){
    Project::query()->findOrFail($id)->delete;
    return back();
}

_card.blade.php

<div class="col-3 my-3">
<div  class="card project-card">
    <ul class="icon-bar">
        <li>
            {!! Form::open(['route'=>['projects.destroy',$project->id],'method'=>'DELETE']) !!}
                <button type="submit" class="btn btn-default">
                    <i class="fa fa-btn fa-times"></i>
                </button>
            {!! Form::close() !!}
        </li>

        <li><i class="fa fa-btn fa-cog"></i></li>
    </ul>

    <a href="projects/{{ $project->id }}">
        <img class="card-img-top" src="{{ asset('storage/thumbs/original/'.$project->thumbnail) }}"
             alt="Card image cap">
    </a>

    <div class="card-body py-3">
        <a href="projects/{{ $project->id }}">
            <h6 class="card-title text-center">{{ $project->name }}</h6>
        </a>
    </div>
</div>

您好,请检查HTML输出。谢谢!您好,请检查HTML输出。谢谢!

HTML

2 个答案:

答案 0 :(得分:0)

您不能以DELETEGET形式进行POST请求。可以在ajax请求中使用其他方法。

将方法更改为路线中的POST和表格即可。

答案 1 :(得分:0)

https://laravel.com/docs/5.7/routing#form-method-spoofing

  

HTML表单不支持PUTPATCHDELETE操作。因此,在定义从HTML表单调用的PUTPATCHDELETE路由时,您需要向表单添加一个隐藏的_method字段。通过_method字段发送的值将用作HTTP请求方法:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="DELETE">
</form>

您的'method'=>'DELETE'应该会生成此值,但是Laravel Collective文档在示例中显示了小写的method值-这可能是一个问题。检查_method字段的生成HTML。