2014-10-22 5 views
0

Я пытаюсь использовать select2 для моего symfony2 entity fields.Symfony2 - Ошибка проверки правильности отображения формы

Я создал расширение поля сущности, шаблон ветви и модельный трансформатор для него. Рендеринг работает очень хорошо, однако у меня возникают проблемы с отправкой полей.

С форматом происхождения, значения передаются так:

Content-Disposition: form-data; name="com_bundle_book[series]" 1 

И для лица с несколькими s

поведение
Content-Disposition: form-data; name="com_bundle_book[author][]" 1 
Content-Disposition: form-data; name="com_bundle_book[author][]" 3 

ВЫБ.2 является замена существующего поля со скрытым полем. Отправленные данные выглядит следующим образом:

Content-Disposition: form-data; name="com_bundle_book[series]" TraLiRo 
Content-Disposition: form-data; name="com_bundle_book[author][]" Ferdinand,Hans 

Я надеялся уладить это с modelTransformer, но вместо этого я получаю сообщение об ошибке (недопустимое значение) для обоих полей в то время как modelTransformer никогда не вызывается.

Я попробовал его с расширением сущности и расширением сущности. Мои услуги:

com_bundle.tag_type_extension: 
    class: ...\Form\Extension\TagTypeExtension 
    tags: 
     - { name: form.type_extension, alias: entity } 
    arguments: [@doctrine.orm.entity_manager] 
com_bundle.form.type.tagType_entity: 
    class: ...\Form\Extension\TagTypeExtension2 
    tags: 
     - { name: form.type, alias: tagType_entity } 
    arguments: [@doctrine.orm.entity_manager] 

Классы:

Как это исправить?

Update

Форма построена так:

$builder 
     ->add('author', 
      'entity', 
      array(
       'select2' => true, 
       'multiple' => true, 
       'class' => 'Bundle:Author', 
       'property' => 'name' 
      ) 
     ) 
+0

Вы должны размещать код вашего трансформатора и линии, где вы пытаетесь его активировать. – AlterPHP

+0

@AlterPHP Абсолютно, надеюсь, это поможет. Застрял на этом с недели ... – Patrick

ответ

1

Ваш трансформатор не должен возвращать объект, но идентификатор объекта, как объект по умолчанию ModelTransformer еще применяется и преобразуют эти идентификаторы в объекты.

Объект модели Doctrine Model Transformer применяется перед вашим, поэтому вы никогда не достигаете его. Добавьте его в качестве ViewTransformer, как это:

$builder->addViewTransformer(
    new ObjectListToStringTransformer(
     $this->em, 
     [ 
      'class' => $options['class'], 
      'property' => $options['property'], 
      'delimiter' => ',' 
     ] 
    ), true 
); 

Я добавил ИСТИНУ в качестве второго аргумента addViewTransformer => он заставляет свой трансформатор предварять по сравнению с другими теми, которые определены по типу родительского поля.

EDIT: Таким образом, вы должны адаптировать свой трансформатор преобразование() метод, как он теперь будет получать массив идентификаторов, а не массив объектов ...

+0

Спасибо, что приносит свет в темноту. Но мои методы преобразования и reverseTransform до сих пор даже не называются ** **. Зачем? – Patrick

+0

Так что попробуйте не предварять ViewTransformer, удалив аргумент «true». – AlterPHP

+0

Просьба показать код, который также создает форму. – AlterPHP