Flow3 — Как инициализировать и использовать глобальный контроллер?

Теперь у меня есть несколько сущностей, репозиториев и контроллеров в потоке 3, и они работают очень хорошо. Если кому-то нужна глобальная переменная жидкости (например, имя пользователя, напечатанное в макете по умолчанию), он должен определить и использовать глобальный контроллер.

Как я могу создавать и использовать такие контроллеры?


person Pete    schedule 06.08.2013    source источник
comment
Зачем вам нужен глобальный контроллер для отображения имени пользователя? Не могли бы вы дать более подробную информацию? На самом деле у вас будут полевые пользователи в вашей модели, сопоставленные с таблицей пользователей. Оттуда у вас есть доступ ко всем пользователям и их именам.   -  person Wipster    schedule 06.08.2013
comment
Да, это правильно, но вам также нужно получить пользователя в каждом отдельном контроллере. И я не хочу делать это для каждого отдельного контроллера. Поэтому мне нужен контроллер, который всегда будет вызываться.   -  person Pete    schedule 06.08.2013
comment
Моя вина! Не увидел тег потока. Удалил мой ответ.   -  person Wipster    schedule 06.08.2013


Ответы (1)


Контроллеры — это классы, поэтому вы можете расширять их и создавать абстрактные.

Предположим, у вас есть LoveController в пакете My.Relationships. Вы можете создать отдельный базовый пакет, например My.Life с AbstractLifeController внутри (php: abstract class AbstractLifeController extends \TYPO3\Flow\Mvc\Controller\ActionController).

Теперь есть initialize* методов (где * может быть Action, View, AnyAction и так далее). В вашем случае используйте: protected initializeView(\TYPO3\Flow\Mvc\View\ViewInterface $view) в этом абстрактном контроллере и назначьте там некоторые переменные, т.е. $view->assign('myName', $myName);...

Затем, когда ваш LoveController extends \My\Life\Controller\AbstractLifeController, эта переменная {myName} будет видна в жидкости для шаблонов, используемых ее действиями.

Таким образом, вместо того, чтобы расширять \TYPO3\Flow\Mvc\Controller\ActionController для всех ваших контроллеров, просто расширьте этот абстрактный \My\Life\Controller\AbstractLifeController.

person k.tarkin    schedule 27.09.2013