路由:一个uri,两个控制器。 Laravel 8

时间:2021-02-15 18:12:33

标签: laravel laravel-8

所以,存在冲突的路由:

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() 中有自己的附加方法和变量。如果我把它们混合起来,那将是一团糟,没人能理解。也许还有另一种方式,也许以某种方式使用中间件?

1 个答案:

答案 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');

这不是最好的方法,也不是一个好的做法,但我不知道其他变体。至少,它有效。

相关问题