所以,存在冲突的路由:
Route::get('{post:slug}', [PostController::class, 'show'])->name('front.posts.show');
Route::get('{page:slug}', [PageController::class, 'show'])->name('front.pages.show');
我有一个想法,将它们统一到一个通用控制器和一个方法中,但 Post 和 Page 是截然不同的实体,它们在 show()
中有自己的附加方法和变量。如果我把它们混合起来,那将是一团糟,没人能理解。也许还有另一种方式,也许以某种方式使用中间件?
答案 0 :(得分:0)
好吧,我别无选择,只能创建通用控制器。它具有三种方法:show($request)
、showPost($post)
和 showPage($page)
。最后两个像往常一样工作 show()
方法并返回具有不同变量的不同视图。这是主要方法,做中间件工作:
public function show($request)
{
if (Post::where('slug', $request)->first()){
$post = Post::where('slug', $request)->first();
return $this->showPost($post);
}
if (Page::where('slug', $request)->first()){
$page = Page::where('slug', $request)->first();
return $this->showPage($page);
}
return abort('404');
}
和路线:
Route::get('{slug}', [ResourceController::class, 'show'])->name('front.resource.show');
这不是最好的方法,也不是一个好的做法,但我不知道其他变体。至少,它有效。