我正在尝试在登录用户的帖子上创建删除按钮。登录用户可以看到其他人的帖子,只删除自己的帖子。我已经设法删除按钮只出现在他自己的帖子上。我认为问题出在视图中的路径中..
控制器:
public function destroy($id)
{
$post = Post::find($id);
$post->delete;
return view('/home', [
'posts' => $post
]);
}
视图:
@if ($post->checkUser(Auth::user()))
<form action="{{ route('posts.destroy, $post') }}" method="POST">
<input type="hidden" name="_method" value="DELETE">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button>Delete</button>
</form>
@endif
路线:
Route::resource('posts', 'PostController');
答案 0 :(得分:6)
将$post->delete;
更改为$post->delete()
;因为delete()方法是一个函数。如果您使用资源,您应该使用delete方法发送请求以进行call destroy方法。但你不能从表单中做到这一点,因为只支持post和get,另一种解决方案你可以使用隐藏输入并使用post方法发送<input name="_method" type="hidden" value="DELETE">
答案 1 :(得分:0)
您需要指定post_id和user_id。
public function destroy($id)
{
$user_id = Auth::user();
$post = Post::where('post_id', $id)->where('user_id',$user_id)-get();
$post->delete();
// do your rest of code
}
根据您的表字段名称更改post_id和user_id名称。
答案 2 :(得分:0)
我认为你应该在视图中编辑这样的路线,
route('posts.destroy, ['id' => $post->id]')
,如果不起作用,请执行php artisan route:list
再次检查您的指定路线,并尝试发布完整错误以便更好地理解。