我正在开发 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/