Как установить значение свойства, которое зависит от другого значения свойства в Sonata Admin - PullRequest
0 голосов
/ 25 июня 2019

У меня есть 2 объекта:

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

Я хочу, чтобы в Ad Admin, когда я выбираю type == abcd, для свойства 'enable' было установлено значение true. Если это efgh, 'enable' будет установлен в false и затем сохранен в БД. Как я могу сделать? Я новичок в 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 голосов
/ 25 июня 2019

Если вам не нужно видеть поле enable в форме, вы можете использовать метод prePersist / preUpdate для достижения этой цели.

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

    parent::prePersist($object);
}

Вы можете узнать больше о наличии хуков здесь .

Кроме того, вы можете посмотреть на события формы здесь .

...