У меня проблема с Symfony 3.4 EntityType.
CategoryType.php
class CategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('spec', CollectionType::class, [
'entry_type' => SpecificationType::class,
'allow_add' => true,
'allow_delete' => true,
'label' => false,
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Category::class,
));
}
}
SpecificationType.php
class SpecificationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', EntityType::class, [
'class' => Specification::class,
'label' => false,
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Specification::class,
));
}
public function getBlockPrefix()
{
return 'specification';
}
}
Форма отображается должным образом: заголовок в виде текстового поля и 2 выбранных элемента.Но проблема отображается, элемент выбора не выбирает выбранное значение.
form.html.twig
{{ form_widget(form.title) }}
{{ form_widget(form.spec) }}
Результат
Ожидаемый результат
В случае SpecificationType.php
EntityType::class
заменяется наTextField:class
теперь форма отображает не 2 элемента выбора. Шина 2 ввода текста (ожидаемое поведение) и назначенные значения верны:
Я начал копать, как эти элементы выборарендерился на первое место и обнаружил, что этот блок {%- block choice_widget_options -%}
отвечает за рендеринг элемента select.
Внутри этого блока находится код мира:
<option value="{{ choice.value }}"{% if choice.attr %}{% with { attr: choice.attr } %}{{ block('attributes') }}{% endwith %}{% endif %}{% if choice is selectedchoice(value) %} selected="selected"{% endif %}>{{ choice_translation_domain is same as(false) ? choice.label : choice.label|trans({}, choice_translation_domain) }}</option>
Именно это условие: {% if choice is selectedchoice(value) %} selected="selected"{% endif %}
отвечает за добавление атрибута selected
к опции.Но расширение value
в selectedchoice(value)
почему-то пусто, поэтому он не помечает выбранную опцию.
Может кто знает, как решить эту проблему?
ОБНОВЛЕНО *Свойство 1060 *
spec
определяется следующим образом:
CategoryEntity.php
/**
* @ORM\ManyToMany(targetEntity="Specification", inversedBy="categoryList")
* @ORM\JoinTable(name="category_specification")
*/
private $spec;