iproger
@iproger
Безответственный гений

Как в Yii2 огранизовать страницы?

В админке будет управление страницами.

На сайте - несколько контроллеров, наследуемых от BaseController, где выборка записи на основании url.
А как быть с 404?
  • Вопрос задан
  • 4333 просмотра
Решения вопроса 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я правильно понимаю, что вы хотите на КАЖДУЮ страницу по контроллеру лепить? Сходите в документацию, почитайте про маршрутизацию запросов.
Ответ написан
reffy
@reffy
Я молодец.
Смотрите как это просто -- нужен лишь роутер.

Вы пишете любые свои правила на ваш мега контроллер BaseController. Например:
'about'    => 'base/about',
'contacts' => 'base/contacts'
...

Но в самом низу роутера добавляете что-то типа:
'<dir1:[\w\-\_\d]+>/<dir2:[\w\-\_\d]+>' => 'base/page',
'<dir1:[\w\-\_\d]+>'                    => 'base/page'

Эти два правила, отвечают за показ страниц. Фишка в том, что если ни одно из правил роутера не сработало выше данных правил, то затем срабатывают эти правила. Но тут только для страниц 2-х уровней вложенности.

Что насчёт ошибки 404, то её вы можете отдавать в методе `page` контроллера `Base`. Если не нашли ни одной страницы(в роутере это $dir1 либо $dir2), то выкидываем 404.
Ответ написан
iproger
@iproger Автор вопроса
Безответственный гений
Реализовал так.
Правила:
'rules' => [
	'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
	'<dir1:[\w\-\_\d]+>'	                  => 'page/index'
],


Все контроллеры, без исключения, наследуются от BaseController, он - от системного.
В BaseController есть метод выборки meta, которое во view уже будет использоваться для вставки в теги.
А в методе PageController->actionIndex() отображаются динамические страницы.

Так же никуда не девается правило об ошибках (и соответствующий метод):
'errorHandler' => [
	'errorAction' => 'site/error',
],


UPDATE: все же ошибся немного, в правилах не правильно работает, изменил на:
'errorHandler' => [
	'errorAction' => 'page/index',
],
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы