我正在尝试将所选属性添加到我的<option>
代码
{% for product in form.products %}
{# of course this should only done inside a if,
but for testing purpose, it's okay #}
{{ form_widget(product, { 'attr': {'selected': 'selected'} }) }}
{% endfor %}
然而,这不起作用。即使是symfony2文档中完全相同的副本和粘贴也不起作用:http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand
我在FormTypeàla:
中添加了表单元素public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
$builder
->add('products', 'entity', array('attr' => array('class' => 'choseable input-xlarge'),
'property_path' => false, 'label' => 'form.products.title', 'class' => 'Test\Bundle\Entity\Product', 'choices' => $products, 'multiple' => true, 'empty_value' => 'form.products.placeholder'));
}
以上示例中的所有变量($products
)都可以。
有问题吗?
我正在使用Symfony 2.1.9-dev。
答案 0 :(得分:0)
您可以使用表单创建代码更新问题吗?我很确定Symfony只有在中选择了项才能在模型中出现。但是,由于您的字段标有property_path => false
,我认为您不能覆盖此行为......
一个想法:
setData
的忠实粉丝,但是这样的情况只是要求它:)
希望这有助于......
答案 1 :(得分:0)
您的代码存在一些问题。为了更清晰,我重新格式化了下面的代码。
public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
$builder->add('products', 'entity', array(
'attr' => array('class' => 'choseable input-xlarge'),
'property_path' => false,
'label' => 'form.products.title',
'class' => 'Test\Bundle\Entity\Product',
'choices' => $products,
'multiple' => true,
'empty_value' => 'form.products.placeholder'
));
}
AbstractType
)。请使用getParent()
来扩展其他类型。<option>
标记的属性。你必须手工渲染标签。getProducts()
来获取默认值,但您通过将property_path
设置为false
来禁用此功能。因此,您应该使用data
选项手动设置默认值。请注意,默认值必须是数组/集合,因为multiple
为true
。choices
,这是一种不好的做法。如果您只是删除此选项,实体字段本身可以查询数据库中的选项并优化所需的语句以获得更好的性能。