Разбор Аннотаций Symfony 2

Пётр Сергеев — Jan 21, 2012    development

Одним из крутых инструменов фрэймворка Symfony 2 является возможность конфигурировать свое приложение посредством аннотаций. Изначально аннотации использовались в Doctrine 2, в частности для создания моделей и валидации. В Symfony 2 так же добавлена поддаржка аннотаций с помощью двух бандлов: SensioFrameworkExtraBundle и JMSSecurityExtraBunlde. Два этих бандла позволяют конфигурировать такие аспекты работы приложения, как шаблонизация, права доступа, роутинг и другие. Конечно, возможность писать конфиги на XML или YAML никто не отменял, но аннотации позволяют вам делать это прям в файле контроллера, причем достаточно легко и быстро.

Стоит отметить что механизм аннотаций основан на фиче php 5 - работе с Reflection API (документация, в основном вся работа с ними проходит в SensioFrameworkExtraBunlde’e, который в свою очередь использует некоторые компоненты Doctrine 2, а так же непосредственно Reflection API.

SensioFrameworkExtraBundle

Благодаря этому бандлу мы можем использовать такие аннотации, как:

  • @Route
  • @Method
  • @Template
  • @Cache
  • @ParamConvert

Из названия аннотаций примерно понятно, на что они влияют, более подробно они, принимаемые ими параметры и возможности описаны в документации фрэймворка.

JMSSecurityExtraBunlde

Этот бандл предоставляет расширенные возможности Symfony 2 Security компонента, в частности аннотации позволяют разграничить доступ к отдельным действиям контроллера. Бандл определяет следующие аннотации:

  • @PreAuthorize
  • @Secure
  • @SecureParam
  • @SecureReturn
  • @RunAs
  • @SatisfiesParentSecurityPolicy

Документация, установка и конфигурирование бандла по ссылке

Ко всем своим достоинствам, Symfony позволяет добавлять свои аннотации. Для этого достаточно создать класс, описывающий метод-хук контроллера onKernelController, а потом зарегестрировать его в конфиге сервисов.

Кстати, аннотации, как и другие конфиги, отлично кэшируются. Я дико полюбил этот интсрумент, чего и тебе советую, уважаемый читатель. Use the annotations, Luke.

Evercode Lab

Close