如何设置取决于Sonata Admin中另一个属性值的属性值

时间:2019-06-25 03:15:51

标签: symfony sonata-admin

我有2个实体:

Ad: id, type, enable(boolean)
Type: id, name (1: abcd, 2: efgh)

当我选择类型== abcd时,我想在Ad Admin中将“启用”属性设置为true。如果有效,则将“ enable”设置为false,然后保存到DB中。我能怎么做?我是Symfony的新手,这是我的代码:

类型实体:

   /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

广告实体:

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="boolean", nullable=true)
     */
    private $enable;

    /**
     * @var Type
     *
     * @ORM\ManyToOne(targetEntity="\App\Entity\Type")
     * @ORM\JoinColumn(onDelete="restrict")
     */
    private $type;

这是我的AdAdmin.php

    protected function configureFormFields(FormMapper $formMapper){
        $formMapper
             ->add('type')
             ->add('enable');
    }

1 个答案:

答案 0 :(得分:0)

如果您不需要在表单上看到enable字段,则可以使用prePersist / preUpdate方法来实现。

public function prePersist($object)
{
    if ('abcd' === $object->getType()) {
        $object->setEnabled(true);
    }

    parent::prePersist($object);
}

您可以阅读有关具有钩子here的更多信息。

或者,您可以调查表单事件here