Symfony Sonata管理启用操作
我正在使用Symfony创建一个网站,并安装了sonata管理包。 我有一个带有布尔变量(enable)的实体。 我希望当这个变量的状态变为True时,同一个表的另一个变为False。事实上,我只希望同一个表的一个变量(enable)为True 所以我想直接在实体中更改setEnable,但我无法从实体类中获取存储库Symfony Sonata管理启用操作,symfony,sonata-admin,Symfony,Sonata Admin,我正在使用Symfony创建一个网站,并安装了sonata管理包。 我有一个带有布尔变量(enable)的实体。 我希望当这个变量的状态变为True时,同一个表的另一个变为False。事实上,我只希望同一个表的一个变量(enable)为True 所以我想直接在实体中更改setEnable,但我无法从实体类中获取存储库 如何从实体类获取存储库?您应该使用lifecycleCallbacks来完成此操作(使用预更新),请检查文档以获得良好的配置。 这样做: public function pr
如何从实体类获取存储库?您应该使用lifecycleCallbacks来完成此操作(使用预更新),请检查文档以获得良好的配置。 这样做:
public function preUpload()
{
if ($this->getVariable1())
$this->setVariable2(false);
}
我想你可能会改变看法。 如果此行为是应用程序的逻辑,那么最好执行以下操作。因此,当您持久化或更新您的实体时,将对其进行检查 看看 在您的特定情况下,这将通过以下简单代码完成:
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
class ObjectSubscriber implements EventSubscriber
{
public function __construct($objectManager)
{
}
public function getSubscribedEvents()
{
return array(
'postPersist',
'postUpdate',
);
}
public function postUpdate(LifecycleEventArgs $args)
{
$this->manage($args);
}
public function postPersist(LifecycleEventArgs $args)
{
$this->manage($args);
}
public function manage(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof YourEntity) {
if ($entity->getEnable()) {
$em = $args->getEntityManager();
$entities = $em->getRepository('YourEntityRepository')->findByEnable(true);
foreach ($entities as $e) {
if ($e->getId() == $entity->getId()) {
continue;
}
$e->setEnable(false);
}
$em->flush();
}
}
}
}
好的,谢谢,我用@ORM\PreUpdate()注释将它放在我的实体类中。现在我的第二个问题是如何访问该实体的其他对象以更新它们?因为我不能在实体类中使用getEntityManager()。您不需要使用EntityManager,我编辑了我的第一篇文章,请检查。但我想更改表的其他对象。例如$object1->setVariable(false)$object2->setVariable(false)$此->设置变量(true);