2015-03-24 3 views
1

У меня есть классы propel, которые реализуют метод preSave. Это крючок, где некоторые поля могут автоматически обновляться при каждой операции сохранения. Это необходимо для сохранения даты последнего обновления и пользователя последнего обновления.Symfony2: ввести контекст безопасности в классы моделей

Проблема заключается в том, что классы модели не имеют доступа к контейнеру службы, где я могу получить идентификатор пользователя (для установки в поле последнего обновления). Модельные классы не могут (по моему известному) быть объявлены как сервис, поскольку они являются определенными сущностями, созданными самим движением, а не контейнером сервиса.

Единственное решение, которое я вижу, это иметь «реальный» синглтон (со статическим экземпляром), содержащий объект пользователя, который я бы инициировал во время загрузки приложения, тогда любой класс модели мог бы получить к нему доступ.

Любая идея?

+0

Для Propel2: https://github.com/marcj/EventDispatcherBehavior. Используйте прослушиватель, там вы можете присоединить/определить другие службы как аргументы конструктора, как обычно. –

ответ

0

Для тех, у кого есть тот же движок, данный комплект добавляет поведение EventDispatchor к Propel, что означает, что вы можете управлять событиями движения в том же виде, что и Symfony, но он отделен от контейнера Symfony (он швы его используя его собственный контейнер).

Но glorpen/propel-bundle выполняет эту работу очень хорошо, вы действительно можете определить сервис, который прослушивает события Propel, используя простые теги.

Смежные вопросы