我正在开发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
来捕获它?
提前致谢。
答案 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)
除GET
和POST
以外的任何方法都要求您使用隐藏表单输入指定方法类型。这就是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>