我是 Laravel 框架的新手,我正在构建一个简单的博客。我可以创建一个博客,显示一个博客并显示所有博客的概览。现在我想删除一个博客。因此,我在我的视图中创建了一个删除按钮,其中包含一个路由链接,该链接还将传递文章的 ID。然后,在我的路由文件中我指定了一个删除请求和一个控制器方法。在方法中,我找到了 id 并尝试删除具有我在路由/视图中指定的 id 的行。
这是行不通的。它不是激活 destroy/delete 方法,而是显示文章而不是删除它,并激活 show 方法而不是 delete 方法。有人可以帮帮我吗,我做错了什么?
查看.blade.php
<a href="{{route('nieuws.destroy', ['id' => $blog->id])}}" onclick="return confirm('Weet je dit zeker?')">
<i class="fa fa-trash"></i>
</a>
路线
Route::group(['middleware' => 'auth'], function () {
Route::get('/aanvragen', 'aanvragenController@index')->name('aanvragen.index');
Route::get('/logout' , 'Auth\LoginController@logout')->name('logout');
Route::get('/nieuws/toevoegen', 'blogController@create')->name('blogs.add');
Route::post('/nieuws/store', 'blogController@store')->name('nieuws.store');
Route::delete('/nieuws/{id}', 'blogController@destroy')->name('nieuws.destroy');
});
Route::get('/nieuws', 'blogController@index')->name('blogs.index');
Route::get('/nieuws/{blog}', 'blogController@show')->name('blogs.show');
控制器方法
删除/销毁
public function destroy($id) {
$blog = Blog::find($id);
$blog->delete();
return redirect('/nieuws');
}
展示
public function show(Blog $blog) {
dd('show');
return view('blogs.show', compact('blog'));
}
原文由 Giesburts 发布,翻译遵循 CC BY-SA 4.0 许可协议
delete()
路由要求您发布数据。HTML 表单仅支持 GET 和 POST,不支持其他方法,如 DELETE、PUT 等,这就是为什么 Laravel 使用
_method
来欺骗 HTML 表单不支持的方法。在这些情况下您 不 希望使用 GET,因为有人可以通过 IM 或电子邮件向用户发送 url ( http://yoursite.com/blog/delete/1 )。用户点击,博客就消失了。
像使用资源控制器时那样定义您的路线,因此:
并使用带有 delete 方法的表单:
或者像 SR_ 在他对您的 OP 的评论中发布的链接那样做一些 javascript 魔术。
还有一件事,在您的销毁操作中添加某种验证。现在当你提供一个不存在的 id 或其他东西时,你会得到一个 500 错误,而不是你想要一个 404。