【发布时间】:2016-12-20 16:53:25
【问题描述】:
将位置设为:
id name title
--- ----- ------
1 usa United States of America
2 uk United Kingdom
3 canada Canada
我有一个 ** EntityType** 表单字段,名为 location:
class OrderType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('location', EntityType::class, array(
'class' => Location::class,
'choice_label' => 'title',
'choice_name' => 'name',
'choice_value' => 'id',
'multiple' => true,
'expanded' => true,
'data' => array(
'usa', 'canada'
),
));
}
}
例如,我希望选中一些复选框(EntityType、multiple=true、expanded=true)(使用data 选项)。
我将choice_name 选项设置为位置名称,但name 表单字段属性没有改变。
HTML
<input type="checkbox" id="order_location_usa" name="order[location][]" value="1">
<input type="checkbox" id="order_location_uk" name="order[location][]" value="2">
<input type="checkbox" id="order_location_canada" name="order[location][]" value="3">
我错过了什么?
【问题讨论】:
-
这里的问题是什么?设置默认值或更改输入名称?
-
设置默认值(选中复选框),我认为可以使用数据选项来完成。 data 选项需要一个我认为的选项名称数组,不确定
-
为了显示默认数据,我建议您使用绑定对象到表单而不是
'data'表单选项(这可以覆盖它)。但是,这应该适用于Location实例数组而不是字符串数组。 -
故意不绑定到实体。我应该手动完成
-
然后,您需要一个查询来获取这些(
use、canada)位置作为实例并将它们放入数据选项。使用__toString()魔术方法显示默认标签,因此您可以删除choice_label、choice_name和choice_value,因为EntityType能够知道在这种情况下您必须使用id。
标签: symfony symfony-forms