Как стать автором
Обновить

Комментарии 10

Обычные аннотации вроде идут без кеша метадаты, а это довольно сильно кусается по производительности вместе с рефлексией
Согласен. Хотя, данную ситуацию можно улучшить с помощью Doctrine\Common\Annotations\FileCacheReader.

Since parsing docblocks can be expensive you should cache this process by using a caching reader.

Если я правильно понял, @annotation_reader как раз возвращает кэширующий ридер аннотаций.
А в чем смысл аргументов в аннотации если они статические? И их либо можно передать как дефолтный параметр либо вообще не использовать как параметры т.к. значения заранее известны и поэтому конвертировать их в константы?
Сомневаюсь, что аргументы в аннотации оправданы. Я добавил их, скорее, для демонстрации работы с аннотациями.
С другой стороны, возможен следующий вариант реализации инициализирующих методов:

/** @Init(priority=200) */
public function init1() {}

/** @Init(priority=300, args={true}) @Init(priority=100, args={false}) */
public function init2($bool) {}

хотя он маловероятен. Если только добавить какую-то логику обработки результатов вызовов этих методов, влияющих на порядок выполнения.
А если какой-то из Controller Listener-ов подменит вызываемый контроллер после вашей инициализации? Получится, что инициализация отработала, а контроллер будет выполнен совершенно другой :)
Тут AOP так и напрашивается, хоть я это и не люблю. А если делать средствами Symfony, то скорее всего правильнее будет подменять ControllerResolver
Контроллеры можно сервисами регистрировать. С какой угодно инициализацией.
В целом контроллеры вообще не должны иметь какой-то специфичной инициализации, а предобработку request да, надо уже выносить в kernel.controller.
И да, и нет. Они должны быть тонкими — поэтому нет, сам контроллер как сервис может иметь зависимости чтобы не обращаться в service locator по имени нужного сервиса, Да — потому что по той же причине. это просто request/response транслятор. + роутинг к action-ам. сам он ничего не должен уметь кроме serialize/deserialize запросов пользователя. Не само конечно же serialize/deserialize а первичную подготовку Request и «выплёвывания» Response или Exception.

+ для предобработки кстати уже есть функционал от Sensio — https://packagist.org/packages/sensio/framework-extra-bundle

И вообще, аннотации — такая штука. Я бы лично без необходимости не использовал )

А почему запустить событие уже непосредственно в экшене?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории