我已将以下侦听器注册为服务。这将保存已登录的用户。它工作得很好。保存实体后,用户id位于createdBy和updatedBy中。好的,有一个小问题:命令“php-app/console-doctrine:fixtures:load”对非对象上的成员函数getUser()抛出错误“调用。这是可以理解的。直到现在我才必须在以前每次禁用该服务?你有其他解决方案吗?
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); } } }
我的最终代码(Symfony 2.6):
1)听者:
<?php
namespace AppBundle\Listener;
use AppBundle\Entity\Post;
use AppBundle\Entity\Comment;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Class BlameableListener
*
* @package AppBundle\Listener
*/
class BlameableListener
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function prePersist(LifeCycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof Post || $entity instanceof Comment) {
// is authentication information available?
if (null !== $this->tokenStorage->getToken()) {
// get User
$user = $this->tokenStorage->getToken()->getUser();
if (is_object($user)) {
$entity->setAuthorEmail($user->getEmail());
}
}
}
}
}
2) 配置为服务
services:
app.blameable.listener:
class: AppBundle\Listener\BlameableListener
arguments:
- "@security.token_storage"
tags:
- { name: doctrine.event_listener, event: prePersist }
我有一个与类似的侦听器,并试图保存一个(模拟)实体(在您的示例中为“Post”)。当然,从控制台启动命令时我没有登录。
我给监听器添加了一个条件:
if ($entity instanceof Post) {
if (null !== $entity->getUser() {
return;
}
}
现在,我可以在装置内的Post实体上设置(模拟)用户:
$user = $em->getReference('Application\Sonata\UserBundle\Entity\User', 1);
$post = new Post();
$post->setUser($user);
仍然不确定在实体侦听器中设置用户是否是好的做法。
我想目前大多数人会推荐使用ValueObject的"Post"或至少需要设置的构造函数,例如"name"和"User"。
调用“加载装置”命令时,您未登录。也许$this-
我在我的一个工作流应用程序中使用了Camunda BPMN2.0。在我的一个服务任务中,我在start事件中创建了一个执行侦听器,在create事件中创建了一个任务侦听器。我不确定在开始时同时分配这些是否合适。如果是正确的,它们中的哪一个将首先执行--执行监听器或任务监听器,分别在start或create事件中执行?
要运行Kafka,需要在文件。有两种设置我不理解。 有人可以解释侦听器和广告侦听器属性之间的区别吗? 留档说: 侦听器:套接字服务器侦听的地址。 和 advertised.listeners:主机名和端口代理将向生产者和消费者做广告。 我什么时候必须使用哪个设置?
我正在尝试将当前登录的用户插入到侦听器中。我的目标是每次用户执行任何操作时(这两种方法都不适用于我),都将current\DateTime()写入“demo\u user”表的“last\u active”列。 app/config/config.yml src/Demo/UserBundle/EventListener/ActivityWatcher.php 但是$代币总是空的...更新:没有提
问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。
我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">