当前位置: 首页 > 知识库问答 >
问题:

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

佟颖逸
2023-03-14

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

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

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

提前谢谢。

共有3个答案

石正卿
2023-03-14

除了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>
冯德宇
2023-03-14

laravel 5.7请看看我的例子:

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

如果您单击一个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请求也是如此。

<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仅带有@tag:

<form action="{{ url('/categories', ['id' => $category->id]) }}" method="post">
    <input class="btn btn-default" type="submit" value="Delete" />
    @method('delete')
    @csrf
</form>
 类似资料:
  • 在我的React项目中,我有: 没有标题的登录组件 问题:我应该如何构建我的路由器从登录页面开始,当我点击登录时,路由器会把我带到仪表板?

  • 问题内容: 因此,我开始使用Node.js。我在Nodejs.org上与Ryan Dahl一起观看了视频,听说他向网站推荐了Express-js。 我下载了最新版本的Express,并开始编写代码。我在/上有一个完整的静态视图,但是一旦尝试发送参数,就会收到如下错误: 我尝试按照expressjs.com上的指南进行操作,但是在最新版本中,使用路由的方式已更改,这使该指南无法使用。 指南: 由Ex

  • 问题内容: 我正在尝试在Spring MVC控制器(版本3.0.2)中使用和。在Spring控制器类中,有三种与URL映射的方法,如下所示(分别是PUT,GET和POST,仅用于演示目的)。 加载页面时,该方法将很明显地被调用,但是在所有其他情况下(提交页面时),唯一要调用POST的方法是,永远不会调用用指定的方法。 Spring表单仅包含一个提交按钮和一个图像浏览器, 生成的HTML如下, 在我

  • 本文向大家介绍nuxt中使用路由守卫的方法步骤,包括了nuxt中使用路由守卫的方法步骤的使用技巧和注意事项,需要的朋友参考一下 1.在plugins文件下创建一个route.js 2.在nuxt.config.js里面配置 PS:Nuxt在axios请求拦截中使用路由 最近在开发一个网站,用的nuxt搭建的框架,因为需要在请求token过期之后提示用户重新登录并且返回登录页面,但是在axios的配

  • 为了定义辅助路由,我们必须首先添加一个命名的路由出口,其中要呈现辅助路由的内容。 接下来,我们必须定义到应用程序的辅助路由的链接,以导航和呈现内容。 每个辅助路由是独立的路由,可以拥有: 自己的辅助路由 自己的浏览器历史记录栈

  • 将路由链接到参数 显示特定产品详细信息的组件的路由需要该产品ID的路由参数。我们可以使用以下实现: 注意:product-details路由的路径中的 ,它将参数放在路径中。例如,要查看ID为5的产品的产品详细信息页面,必须使用以下URL:localhost:3000/product-details/5 注意,指令传递一个数组,该数组指定路径和路由参数。或者,我们可以使用JS跳转: Product