首页 > 解决方案 > 如何在 Sonata Admin 中设置依赖于另一个属性值的属性值

问题描述

我有 2 个实体:

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

当我选择 type == abcd 时,我希望在 Ad Admin 中,'enable' 属性将设置为 true。如果是 efgh,'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');
    }

标签: symfonysonata-admin

解决方案


如果您不需要查看enable表单上的字段,您可以使用 prePersist/preUpdate 方法来实现此目的。

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

    parent::prePersist($object);
}

您可以在此处阅读有关使用钩子的更多信息。

或者,您可以在此处查看表单事件。


推荐阅读