在 Laravel 5.4 的路由中使用 DELETE 方法

2022-08-30 18:56:32

我正在研究一个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);

我有一个控制器CategoryController,其方法为deptroy(),他删除类别并重定向到类别列表。但是当我点击按钮删除时,我得到一个错误,解释这条路线没有定义。如果我用它替换它工作。我认为URL是用GET调用的,但我会保留它以进行其他操作。Route::deleteRoute::get

我试图用表单替换链接,并将“DELETE”作为“方法”属性的值,但它不起作用。

我怎么能调用网址与删除方法来捕捉它?Route::delete

提前致谢。


答案 1

如果您单击 URL,它将始终是 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" />
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

PUT 请求也是如此。

Laravel 5.1 method_field:

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

由于Laravel 5.6只是用@标签:

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

答案 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>

推荐