2016-10-17 3 views
0

Я пытаюсь создать форму множественного выбора со многими отношениями, но я продолжаю получать это сообщение об ошибке «Невозможно преобразовать значение для пути свойств« rozmiar »: ожидается массив». Это как моя сущность выглядит следующим образом:от многих до многих форм symfony

/** 
* @var ArrayCollection 
* @ORM\ManyToMany(targetEntity="Rozmiar") 
* @ORM\JoinTable(
*  name="buty__rozmiary", 
*  joinColumns={@ORM\JoinColumn(name="buty_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="rozmiar_id", referencedColumnName="id")} 
*) 
*/ 
private $rozmiar; 
/** 
* Set rozmiar 
* 
* @param ArrayCollection $rozmiar 
* @return rozmiar 
*/ 
public function setRozmiar($rozmiar) 
{ 
    $this->rozmiar = $rozmiar; 
    return $this; 

} 

/** 
* @return ArrayCollection 
*/ 
public function getRozmiar() 
{ 
    return $this->rozmiar; 
} 

public function __construct() 
{ 
    $this->rozmiar = new ArrayCollection(); 
} 

И моя форма:

->add('rozmiar', ChoiceType::class, array(
      'expanded' => true, 
      'multiple' => true, 
      'choices' => [35,36,37,38,39,40] 
      ) 
     ) 

Что я должен сделать, чтобы получить эту работу? Заранее спасибо за вашу помощь.

EDIT: Я изменил часть моей ФОРМЫ к

->add('rozmiar', EntityType::class, array( 
'class' => 'ShoeShopBundle:Buty', 
'expanded' => true, 
'multiple' => true, 
'choices' => [35,36,37,38,39,40])) 

и теперь я получаю «Warning: spl_object_hash() ожидает параметр 1, чтобы быть объектом, число дано» ошибка. Каков правильный способ определения выбора в этом поле?

+0

Вы пытались установить расширенный на false? – DOZ

+0

Вы должны использовать поле 'EntityType' http://symfony.com/doc/current/reference/forms/types/entity.html – malcolm

+0

Итак, когда я использую поле EntityType, например:' -> add ('rozmiar' , EntityType :: class, array ( 'class' => 'ShoeShopBundle: Buty', 'extended' => false, 'multiple' => true, ) ) 'он работает, но как я могу определить список вариантов выбора? Должен ли я определить его в контроллере? Когда я использую '' choice '=> [35,36,37,38,39,40] 'I'm get" Warning: spl_object_hash() ожидает, что параметр 1 будет объектом, целое число задано « –

ответ

0

Вам нужно поле EntityType

->add('rozmiar', EntityType::class, array(
    'class' => 'MyBundle:Rozmiar', 
    'multiple' => true, 
    'expanded' => true, 
    'choices' => $editedObject->getRozmiarChoices(), 
)) 

с

$editedObject = $builder->getData(); 

быть осторожным, чтобы редактировать addRozmiar метод для добавленной Rozmiar знать, что новая ссылка:

public function addRozmiar(\MyBundle\Entity\Rozmiar $rozmiar) 
{ 
    if (!$this->rozmiar->contains($rozmiar)) { 
     $this->rozmiar->add($rozmiar); 
     $rozmiar->addButy($this); 
    } 
    return $this; 
} 

в Symfony2 I также часто необходимо добавить это значение в форму, чтобы принудительно использовать ваш метод: 'by_reference' => false,

более подробная информация: http://symfony.com/doc/current/reference/forms/types/entity.html


Edit:

Ваш список выбора должен быть массивом или ArrayCollection объектов класса "MyBundle: Rozmiar". не целые. Вы также можете использовать опцию 'query_builder' вместо опции 'choice', если список не связан с вашим отредактированным объектом.

посмотреть здесь: http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

Ваш список [35,36,37,38,39,40] не должны быть жестко закодированы в вашей форме. Вы должны поместить его в свой объект, если это перечисление, или добавить логическое поле в другой таблице в ordrer, чтобы использовать построитель запросов, чтобы найти их.

Я надеюсь, что это поможет :)

+0

Это форма для другой Entity, называемый Buty (ButyForm), поэтому мне нужно определить метод getRozmiarChoices в нем?Как мне заставить метод getDoctrine работать в определении сущности? –

+0

Спасибо за помощь, теперь она работает. Может быть, вы знаете, как сделать список мультиселекций (где вам не нужно нажимать ctrl для выбора более одного параметра) вместо флажков? –

+0

Что вы подразумеваете под списком мультиселементов? –

Смежные вопросы