Как сделать функцию инициализации в Phalcon?

Вопрос такой, есть некие действия, которые должны происходить при срабатывании любого контроллера, например, установка дефолтного тайтла страницы. Разработчики в документации предлагают использовать следующую схему:

<?php

use Phalcon\Mvc\Controller;

class ControllerBase extends Controller
{
    protected function initialize()
    {
        $this->tag->setTitle('INVO');
    }

    // ...
}


<?php

class ProductsController extends ControllerBase
{
    public function initialize()
    {
        parent::initialize();
        $this->tag->prependTitle('Управление типами ваших продуктов | ');
    }

    // ...
}


Очень не хочется писать в каждом контроллере, особенно если несколько разделов сайта и в каждом свой контроллер:
<?php

    public function initialize()
    {
        parent::initialize();
    }

Мне кажется существует более гармоничное решение, не думаю, что подобная тавтология кода - это хорошо.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
KorsaR-ZN
@KorsaR-ZN
Да по-разному можно, например так, сделать интерфейс AwarePageMetainfo, с методом например getTitle(). Дальше реализовать этот интерфейс в нужных вам контроллерах, далее пишите слушателя событий диспетчеризации "beforeExecuteRoute", в нём получаете активный контроллер провереяете факт реализации нужного интерфейса, после чего выставляете мета-информацию страницы.
А дальше вступает ООП в каждом контроллере будет своя реализации интерфейса. Ну я думаю идея понятна)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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