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

标签 php laravel laravel-blade

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

我创建了 View (使用 Blade )来删除类别:

<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() 方法的 Controller CategoryController,它删除类别并重定向到类别列表。但是当我点击删除按钮时,我得到一个错误,解释这条路线没有定义。如果我用 Route::get 替换 Route::delete 它就可以了。我认为 url 是用 GET 调用的,但我会保留它用于其他操作。

我尝试用表单替换链接并将“DELETE”替换为“method”属性的值,但没有成功。

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

提前致谢。

最佳答案

如果您点击一个 url,它将始终是一个 GET 方法。

既然你想定义为DELETE,你应该重新做成一个post形式,然后添加

<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 方法字段:

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

关于php - 在 Laravel 5.4 的路由中使用 DELETE 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113969/

相关文章:

php - 通过 shell 执行命令后不返回输出

laravel - 使用 Laravel Omnipay(mollie 网关)付款

php - 如何在 Blade View 中动态插入代码

php - Laravel Multi-Tenancy

php - 在 PHP 的外键中调用外键

javascript - 在 laravel 中通过 javascript 计算价格

php - Laravel:在 DB::raw() 中使用别名时未知列

php - 数组最后返回一个值

php - 在 Laravel Blade 中写 @php @endphp 而不是 <?php ?> 有什么意义?

php - 从字符串加载模板时,Laravel Blade 指令不执行