我已經註冊了以下監聽器作爲服務。這保存了登錄用戶。它完美的作品。保存實體後,用戶標識位於createdBy和updatedBy中。好的一個小問題:命令「php app/console doctrine:fixtures:load」會拋出錯誤「調用一個非對象的成員函數getUser()。 這是可以理解的。只有現在,我必須禁用每一個時間之前的服務呢?當你調用命令負載燈具你有另一種解決方案?Symfony2監聽器和DataFixtures
class UserListener implements EventSubscriber { protected $container; public function __construct(ContainerInterface $container) { $this->container = $container; } public function getSubscribedEvents() { return array( Events::prePersist, Events::preUpdate ); } public function prePersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); if ($entity instanceof Post) { $user = $this->container->get('security.context')->getToken()->getUser(); if (!is_object($user) || !$user instanceof User) { throw new AccessDeniedException(); } $entity->setCreatedBy($user); $entity->setUpdatedBy($user); } } /** * @param PreUpdateEventArgs $args */ public function preUpdate(PreUpdateEventArgs $args) { $entity = $args->getEntity(); $em = $args->getEntityManager(); if ($entity instanceof Post) { $user = $this->container->get('security.context')->getToken()->getUser(); if (!is_object($user) || !$user instanceof User) { throw new AccessDeniedException(); } $entity->setUpdatedBy($user); $uow = $em->getUnitOfWork(); $meta = $em->getClassMetadata(get_class($entity)); $uow->recomputeSingleEntityChangeSet($meta, $entity); } } }
問題解決了與prePersist PHP_SAPI條件。 – stwe
你能發佈最終的代碼@stwe嗎? – webDEVILopers
順便說一句,使用'$ this-> container-> get('security.authorization_checker')'代替(2.6中的new) – Ronan