set multiple = false в форме во многих отношениях symfony2 - php


1

У меня есть отношение "многие ко многим" между двумя объектами A и B.

Поэтому, добавляя форму, чтобы добавить entityA в entityB, я делаю следующее:

$builder          
    ->add(entityAs, entity, array(
      class    => xxxBundle:EntityA,
      property => name,
      multiple => true,
    ));}

И все в порядке.

Но в зависимости от типа поля entityA, я хочу иногда устанавливать "multiple" в false, поэтому я делаю следующее:

if($type==a){
    $builder          
        ->add(entityAs, entity, array(
          class    => xxxBundle:entityA,
          property => name,
          multiple => true,
        ));}

else {
    $builder          
        ->add(entityAs, entity, array(
          class    => xxxBundle:entityA,
          property => name,
          multiple => false,

        ));
}

Это дает мне следующую ошибку:

Catchable Fatal Error: Argument 1 passed to DoctrineCommonCollectionsArrayCollection::__construct() must be an array, object given, called in C:wampwwwSymfonyvendordoctrineormlibDoctrineORMUnitOfWork.php on line 519 and defined in C:wampwwwSymfonyvendordoctrinecommonlibDoctrineCommonCollectionsArrayCollection.php line 48 

Может кто-нибудь мне помочь?

  •  5
  •  2
  • 8 фев 2020 2020-02-08 08:05:56

2 ответа

0

я бы проверил значение entityA в контроллере и в зависимости от него создавал разные формы.

в контроллере:

if ($entityA->getType() == a) { 
    $form = new FormB(); // form with multiple true
} else {
    $form = new FormA(); // form with multiple false
}
6

В EntityA у вас есть что-то вроде этого, правильно?

public function setEntitiesB($data)
{
    $this->entitiesB = $data ;
}

Теперь, поскольку вы также можете получать одиночное значение вместо массива значений, вам нужно что-то вроде этого:

public function setEntitiesB($data)
{
    if ( is_array($data) ) {
        $this->entitiesB = $data ;
    } else {
        $this->entitiesB->clear() ;
        $this->entitiesB->add($data) ;
    }
}
  • 8 фев 2020 2020-02-08 08:05:57