Комментарии 10
Обычные аннотации вроде идут без кеша метадаты, а это довольно сильно кусается по производительности вместе с рефлексией
0
А в чем смысл аргументов в аннотации если они статические? И их либо можно передать как дефолтный параметр либо вообще не использовать как параметры т.к. значения заранее известны и поэтому конвертировать их в константы?
0
Сомневаюсь, что аргументы в аннотации оправданы. Я добавил их, скорее, для демонстрации работы с аннотациями.
С другой стороны, возможен следующий вариант реализации инициализирующих методов:
хотя он маловероятен. Если только добавить какую-то логику обработки результатов вызовов этих методов, влияющих на порядок выполнения.
С другой стороны, возможен следующий вариант реализации инициализирующих методов:
/** @Init(priority=200) */
public function init1() {}
/** @Init(priority=300, args={true}) @Init(priority=100, args={false}) */
public function init2($bool) {}
хотя он маловероятен. Если только добавить какую-то логику обработки результатов вызовов этих методов, влияющих на порядок выполнения.
0
А если какой-то из Controller Listener-ов подменит вызываемый контроллер после вашей инициализации? Получится, что инициализация отработала, а контроллер будет выполнен совершенно другой :)
Тут AOP так и напрашивается, хоть я это и не люблю. А если делать средствами Symfony, то скорее всего правильнее будет подменять ControllerResolver
Тут AOP так и напрашивается, хоть я это и не люблю. А если делать средствами Symfony, то скорее всего правильнее будет подменять ControllerResolver
0
Контроллеры можно сервисами регистрировать. С какой угодно инициализацией.
+1
У меня тоже первая мысль такая была.
В документации этому целая глава посвящена: http://symfony.com/doc/current/cookbook/controller/service.html
В документации этому целая глава посвящена: http://symfony.com/doc/current/cookbook/controller/service.html
0
В целом контроллеры вообще не должны иметь какой-то специфичной инициализации, а предобработку request да, надо уже выносить в kernel.controller.
0
И да, и нет. Они должны быть тонкими — поэтому нет, сам контроллер как сервис может иметь зависимости чтобы не обращаться в service locator по имени нужного сервиса, Да — потому что по той же причине. это просто request/response транслятор. + роутинг к action-ам. сам он ничего не должен уметь кроме serialize/deserialize запросов пользователя. Не само конечно же serialize/deserialize а первичную подготовку Request и «выплёвывания» Response или Exception.
+ для предобработки кстати уже есть функционал от Sensio — https://packagist.org/packages/sensio/framework-extra-bundle
И вообще, аннотации — такая штука. Я бы лично без необходимости не использовал )
+ для предобработки кстати уже есть функционал от Sensio — https://packagist.org/packages/sensio/framework-extra-bundle
И вообще, аннотации — такая штука. Я бы лично без необходимости не использовал )
0
А почему запустить событие уже непосредственно в экшене?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Инициализируемые контроллеры в Symfony и работа с аннотациями