路线
Route::get('/post/preview/{slug}', [PostController::class, 'viewPreview'])->name('post.single.preview');
后置控制器
protected function resourceAbilityMap()
{
return array_merge(parent::resourceAbilityMap(), [
'viewPreview' => 'viewPreview'
]);
}
public function viewPreview($slug)
{
$post = Post::where('slug', $slug)->firstOrFail();
$this->authorize('viewPreview', $post);
return view('post.single', [
'post' => $post,
'morePosts' => $this->getMorePosts($post->id, 3),
]);
}
发布政策
public function viewPreview(User $user, Post $post)
{
return true;
}
无论我将
true
还是 false
放入策略方法中,它总是返回 403。我错过了什么?
部分
protected function resourceAbilityMap()
{
return array_merge(parent::resourceAbilityMap(), [
'viewPreview' => 'viewPreview'
]);
}
不需要。我在 SO 上找到了它,但它不在 Laravel 官方文档中。
问题是,在测试时我没有登录,对于需要类型提示模型的策略方法,Laravel 将始终返回
false
(在本例中为 User $user
)。为了测试,添加 ?
使其工作:viewPreview(?User $user, ...)