在Laravel 5.4中使用DELETE方法

时间:2017-05-22 13:18:53

标签: php laravel blade

我正在开发Laravel(v 5.4)项目,我做了CRUD来管理类别。目前,我可以创建一个新类别,我可以删除。

我创建了视图(使用刀片)来删除类别:

<table class="table">
  <thead>
    <th>Name</th>
    <th>Action</th>
  </thead>
  <tbody>
    @foreach ($categories as $category)
      <tr>
        <td>$category->name</td>
        <td>
          <a href="{{ url('/categories', ['id' => $category->id]) }}">
            <button class="btn btn-default">
            Delete
            </button>
          </a>
        </td>
      </tr>
    @endforeach
  </tbody>
</table>

在路由文件web.php中,我写道:

Route::delete('/categories/{id}', CategoryController@destroy);

我有一个带有方法destroy()的控制器CategoryController,它删除类别并重定向到类别列表。但是当我点击按钮删除时,我得到一个错误,解释这条路线没有定义。如果我将Route::delete替换为Route::get则可行。我认为该网址是通过GET调用的,但我会将其保留用于其他操作。

我尝试用表单替换链接&#34; DELETE&#34;作为&#34;方法&#34;的价值属性,但它没有工作。

如何使用DELETE方法调用url以使用Route::delete来捕获它?

提前致谢。

3 个答案:

答案 0 :(得分:13)

如果你点击一个网址,它将永远是一个GET方法。

由于您希望将其定义为DELETE,因此您应将其重新制作为帖子表格并添加

<input type="hidden" name="_method" value="delete" />

在里面。喜欢替换:

<a href="{{ url('/categories', ['id' => $category->id]) }}">
    <button class="btn btn-default">Delete</button>
</a>

使用:

<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
    <input class="btn btn-default" type="submit" value="Delete" />
    <input type="hidden" name="_method" value="delete" />
    {!! csrf_field() !!}
</form>

PUT请求也一样。

编辑:从Laravel 5.1开始,你可以添加:method_field('delete'),看起来像

<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
    <input class="btn btn-default" type="submit" value="Delete" />
    {!! method_field('delete') !!}
    {!! csrf_field() !!}
</form>

答案 1 :(得分:3)

GETPOST以外的任何方法都要求您使用隐藏表单输入指定方法类型。这就是laravel检测它们的方式。在您的情况下,您需要使用表单发送删除操作。这样做。

<table class="table">
    <thead>
    <th>Name</th>
    <th>Action</th>
    </thead>
    <tbody>
    @foreach ($categories as $category)
        <tr>
            <td>$category->name</td>
            <td>
                <form action="/categories/{{ $category->id }}" method="post">
                    {{ method_field('delete') }}
                    <button class="btn btn-default" type="submit">Delete</button>
                </form>
            </td>
        </tr>
    @endforeach
    </tbody>
</table>

答案 2 :(得分:2)

对于laravel 5.7,请查看我的示例:

<form action="{{route('statuses.destroy',[$order_status->id_order_status])}}" method="POST">
 @method('DELETE')
 @csrf
 <button type="submit">Delete</button>               
</form>