【发布时间】:2014-02-03 15:29:42
【问题描述】:
也许有完全不同和更好的方法来满足我的需要,但这是我的情况,欢迎任何 cmets/建议。 我有实体:
/**
* @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';
}
物品类型:
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';
}
在树枝中:
<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 字段。
谢谢
附:使用 Symfony 2.3.7
【问题讨论】:
标签: forms symfony collections twig multi-level