Возможно, есть совершенно другой и лучший подход к тому, что мне нужно, но вот моя ситуация и любые комментарии/предложения приветствуются. У меня есть Entity с:Symfony2 Форма Коллекция 3-го уровня не отображается
/**
* @var string
* @ORM\Column(name="title", type="string", length=255, nullable=true)
*/
protected $title;
/**
* @var string
* @ORM\Column(name="description", type="string", length=1024, nullable=true)
*/
protected $description;
/**
* @var string
* @ORM\Column(name="extra_data", type="json_array", nullable=true)
*/
protected $extraData;
Уведомление $extraData
- это все об этом json_array
.
У меня есть FormType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('items', 'collection', array(
'type' => new ItemType(),
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true,
'options' => array(
'em' => $options['em'],
)
));
}
public function getName()
{
return 'form';
}
ItemType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text', array(
'label' => false,
'required' => false,
))
->add('description', 'textarea', array(
'label' => false,
))
->add('extra_data', 'collection', array(
'type' => new ItemExtraDataType(),
'required' => false,
'allow_add' => false,
'by_reference' => false,
'allow_delete' => false,
));
}
public function getName()
{
return 'item';
}
ItemExtraDataType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('field1', 'text', array(
'required' => false,
))
->add('field2', 'text', array(
'required' => false,
));
}
public function getName()
{
return 'item_extra_data';
}
В Twig:
<form method="post" action="" id="form">
{% for item in form.items %}
{{ form_row(item.title) }}
{{ form_row(item.description) }}
{{ form_row(item.extra_data) }}
{{ form_rest(item) }}
{% endfor %}
{{ form_rest(form) }}
</form>
Также попробовал:
{% for field, value in item.extra_data %}
{{ form_row(value) }}<br><br>
{% endfor %}
А также попытался просто оставить {{ form_rest(item) }}
, но никаких изменений.
Так field1
и field2
никогда не распечатывается. Я не могу ввести значения для этих полей массива JSON. Может быть, я использую это неправильно? Также мне интересно, как работает это поле json_array
.
P.S. Использование Symfony 2.3.7
Так что это не работает для меня больше, потому что теперь мне нужно 'field3' в extra_data как' choice' type – CRONUS