Контроллеры по странице или контроллеры по сущности?

Я создаю в 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")

Каков наилучший подход для этого?

1

Решение

Контроллер будет ответственным за отображение значений сущностей. Таким образом, вы должны использовать ваш второй пример, контроллеры по сущности.

Например, у вас есть функция «Показать мой статический сайт», это одна функция, одна ответственность, поэтому один класс / контроллер. Если вы разделите его на множество контроллеров, это даст вам дублирующий код.

1

Другие решения

Вы можете создать только один маршрут и один метод для статических страниц, которые будут использовать слагы для получения данных для статических страниц из БД.

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

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

Я думаю, что нет «лучше» и «хуже», так как это всегда зависит от вашего варианта использования. Тем не менее, как Laravel намерен с

php artisan make:controller MyController --resource

Контроллер МОЖЕТ представлять основные функциональные возможности относительно одного объекта. Поэтому, вероятно, подход 2 вашего вопроса — это то, что вы ищете.

Как предложил @Alexey Mezenin, вы можете, конечно, создать контроллер, который предназначен для возврата ваших статических страниц — или вы можете даже вернуть их встроенными в свои страницы.

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