Php 按页列出的控制器还是按实体列出的控制器?

Php 按页列出的控制器还是按实体列出的控制器?,php,laravel,controllers,application-design,Php,Laravel,Controllers,Application Design,我正在拉威尔建立一个自我管理的机构网站,其中包含一些动态内容,如:产品、新闻、用户等,我对控制器和最佳实践产生了怀疑 虽然有些页面是完全静态的(关于、服务信息等),但其他页面(如产品列表)是动态的 我不确定是否必须按页面或实体创建控制器。例如: ProductController => shows the page for a single product ProductsController => shows the page for listing all the product

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

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

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

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")

最好的方法是什么?

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


例如,您有“显示我的静态站点”的功能,这是一个功能,一个职责,所以是一个类/控制器。如果将其划分为多个控制器,则会产生重复的代码。

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

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

public function buildStaticPage($slug)
{
    ....
我认为没有“更好”和“更差”,因为它总是取决于您的用例。然而,正如拉雷维尔所希望的那样

php artisan make:controller MyController --resource
控制器可以表示一个实体的基本crud功能。因此,您的问题的方法2可能就是您所寻找的

正如@Alexey Mezenin所建议的,您当然可以创建一个专用于返回静态页面的控制器,或者您甚至可以在reouts中以内联方式返回静态页面

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

那么每个控制器都负责显示同一实体的所有页面?还有CRUD的所有实体操作?例如,您有“显示我的静态站点”功能,这是一个功能,一个职责,所以是一个类/控制器。如果将它划分为多个控制器,则会产生重复的代码。是的,还有积垢,但记住不要把逻辑塞进控制器是的,这就是我现在正在做的。我只是想知道关于控制器概念的最佳方法。我一直认为控制器更像是“律师和客户”。我的意思是,他们的目的是实现一个单一的观点。原因是,如果为单个实体处理每一个操作,它可能会成为Linux内核,我讨厌这种类型的事情。正如前面提到的,没有“唯一的方法”可以让你自由地这样做,但是我总觉得如果你这样做,你会遇到很多控制器。但是如果您有一个用例,其中一个视图有很多端点,那么每个视图都有一个控制器可能是有意义的。