Chu*_*ris 6 php onchange symfony stofdoctrineextensions
我正在使用stof Doctrine扩展的symfony 2.6.3.
TimeStampable和SoftDeletable工作得很好.
Blameable"on create"和"on update"也很好用:
/**
* @var User $createdBy
*
* @Gedmo\Blameable(on="create")
* @ORM\ManyToOne(targetEntity="my\TestBundle\Entity\User")
* @ORM\JoinColumn(name="createdBy", referencedColumnName="id")
*/
protected $createdBy;
/**
* @var User $updatedBy
*
* @Gedmo\Blameable(on="update")
* @ORM\ManyToOne(targetEntity="my\TestBundle\Entity\User")
* @ORM\JoinColumn(name="updatedBy", referencedColumnName="id")
*/
protected $updatedBy;
Run Code Online (Sandbox Code Playgroud)
但"改变"似乎并没有起作用.
/**
* @var User $deletedBy
*
* @Gedmo\Blameable(on="change", field="deletedAt")
* @ORM\ManyToOne(targetEntity="my\UserBundle\Entity\User")
* @ORM\JoinColumn(name="deletedBy", referencedColumnName="id")
*/
protected $deletedBy;
Run Code Online (Sandbox Code Playgroud)
我在"deletedAt"字段上配置了SoftDeletable.SoftDeletable工作正常,但deletedBy从未填充.
我怎样才能让它发挥作用?我只想设置删除实体的用户ID.
问题是当您调用实体(设置用户)时,您想要更新实体(设置用户)的删除方法。
\n\n目前可能还没有一个完美的解决方案来注册使用 Softdeleteable + Blameable 扩展软删除对象的用户。
\n\n一些想法可能是覆盖 SoftDeleteableListener (https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/SoftDeleteableListener.php),但我在执行此操作时遇到了问题。
\n\n我当前的工作解决方案是使用实体侦听器解析器。
\n\nMyEntity.php
\n\n/**\n* @ORM\\EntityListeners({\xe2\x80\x9eAcme\\MyBundle\\Entity\\Listener\\MyEntityListener" })\n*/\n\nclass MyEntity {\n\n/**\n* @ORM\\ManyToOne(targetEntity="Acme\\UserBundle\\Entity\\User")\n* @ORM\\JoinColumn(name="deleted_by", referencedColumnName="id")\n*/\nprivate $deletedBy;\n\npublic function getDeletedBy()\n{\n return $this->deletedBy;\n}\n\npublic function setDeletedBy($deletedBy)\n{\n $this->deletedBy = $deletedBy;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nMyEntityListener.php
\n\nuse Doctrine\\ORM\\Event\\LifecycleEventArgs;\nuse Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface;\nuse Acme\\MyBundle\\Entity\\MyEntity;\n\nclass MyEntityListener\n{\n/**\n * @var TokenStorageInterface\n */\nprivate $token_storage;\n\npublic function __construct(TokenStorageInterface $token_storage)\n{\n $this->token_storage = $token_storage;\n}\n\npublic function preRemove(MyEntity $myentity, LifecycleEventArgs $event)\n{\n $token = $this->token_storage->getToken();\n if (null !== $token) {\n $entityManager = $event->getObjectManager();\n $myentity->setDeletedBy($token->getUser());\n $entityManager->persist($myentity);\n $entityManager->flush();\n }\n}\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这里的一个缺陷是调用flush方法。
\n\n注册服务:
\n\nservices:\n myentity.listener.resolver:\n class: Acme\\MyBundle\\Entity\\Listener\\MyEntityListener\n arguments:\n - @security.token_storage\n tags:\n - { name: doctrine.orm.entity_listener, event: preRemove }\nRun Code Online (Sandbox Code Playgroud)\n\n更新composer.json中的doctrine/doctrine-bundle:
\n\n"doctrine/doctrine-bundle": "1.3.x-dev"\nRun Code Online (Sandbox Code Playgroud)\n\n如果您有任何其他解决方案,特别是有关 SoftDeleteableListener 的解决方案,请在此发布。
\n| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |