页面控制器还是实体控制器?

Controllers by page or controllers by entity?

我正在 Laravel 建立一个自我管理的机构网站,其中包含一些动态内容,例如:产品、新闻、用户等,我对控制器和最佳实践提出了疑问。

虽然有些页面是完全静态的(关于、服务信息等),但其他页面(例如产品列表)是动态的。

我不确定是否必须按页面或实体创建控制器。例如:

ProductController => shows the page for a single product
ProductsController => shows the page for listing all the products
SearchController => shows the page for searching products
AboutController => shows the about page
ServicesController => shows the page for listing services

vs

ProductsController => shows the page for single and multiple products, and the search products page
PagesController / StaticController => shows all static pages (like "about" and "services")

最好的方法是什么?

控制器将class 负责显示实体值。所以你应该使用你的第二个例子,实体控制器。

例如,您有功能 "Show my static site",这是一种功能,一种责任,所以一种 class/controller。如果您将它划分为多个控制器,则会产生重复代码。

您可以为静态页面只创建一个路由和一个方法,它将使用 slugs 从数据库中获取静态页面的数据。

Route::get('\static\{slug}', 'ContentController@buildStaticPage');

public function buildStaticPage($slug)
{
    ....

我认为没有 "better" 和 "worse",因为它始终取决于您的用例。但是,正如 laravel 打算用

php artisan make:controller MyController --resource

控制器可以代表一个实体的基本 crud 功能。因此,您的问题的方法 2 可能就是您要找的东西。

正如@Alexey Mezenin 所建议的那样,您当然可以创建一个专用于 return 您的静态页面的控制器 - 或者您甚至可以 return 它们在您的 reouts 中内联

Route::get('my-static', function() { return view('static.my-page' ); });