我正在尝试使用简单的表单添加名称和颜色的活动。
所以我想制作一个带有一些颜色数组的列表,现在它正在工作我有颜色的名称。
我可以在select标签中添加任何属性:
$form = $this->createFormBuilder($myclass)
->add('Colors','choice',array('label'=>'select some colors',
'multiple'=>true,
'choices'=>array(1=>'red', 2=>'blue', 3=>'green'),
'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata')
));
输出将是这样的:
<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
<option value="1">red</option>
<option value="2">blue</option>
<option value="3">green</option>
</select>
但是如何在选择选项中添加selected="selected"
和我想要的任何属性?像这样:
<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
<option style="background-color: #F00;" value="1" selected="selected">red</option>
<option style="background-color: #00F;" value="2" selected="selected">blue</option>
<option style="background-color: #0F0;" value="3">green</option>
</select>
我的问题是:如何通过symfony FormBuilder为option
标记添加自定义attr(不适用于select
标记)。
注意:我不想使用JavaScript。我想使用symfony2 FormBuilder来自定义我的选择选项。
答案 0 :(得分:10)
通常,字段的默认数据由存储在对象中的值确定。例如,如果
class MyClass
{
private $Colors = array(1, 2);
}
然后条目“1”和“2”(标签为“红色”和“绿色”)将默认显示为选中状态。您还可以在将该值传递给表单之前将其存储在对象中:
$myObject->Colors = array(1, 2);
$form = $this->createFormBuilder($myObject)
...
最后一种可能性是通过传递“data”选项来覆盖存储在对象中的默认值:
$builder->add('Colors', 'choice', array(
'label' => 'select some colors',
'multiple' => true,
'choices' => array(1 => 'red', 2 => 'blue', 3 => 'green'),
'attr' => array('style' => 'width:300px', 'customattr' => 'customdata'),
'data' => array(1, 2),
));
答案 1 :(得分:3)
使用此处所述的数据选项选择=“已选择”: http://symfony.com/doc/current/reference/forms/types/field.html
在你的情况下可能是这样的
$form = $this->createFormBuilder($myclass)
->add('Colors','choice',array('label'=>'select some colors',
'multiple'=>true,
'choices'=>array(1=>'red', 2=>'blue', 3=>'green'),
'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata'),
'data'=> 1
));
新元素是数据,将选择数组的编号设置为选定属性
答案 2 :(得分:1)
symfony中的每个Field
都来自abstract field type,其data
选项,您可以在其中传递默认选项。
顺便说一下,不要传递style
个内容,并且自定义的attrs使用data-*
属性。
答案 3 :(得分:1)
看起来Symfony 2.7将增加支持以使这更容易:
答案 4 :(得分:1)
在表单类方法中添加Symfony \ Component \ Form \ AbstractType :: finishView
public function finishView(FormView $view, FormInterface $form, array $options)
{
parent::finishView($view, $form, $options);
$additionalAttributes = array();
// myMethod - method $choice, returns a value that is to be substituted into the attribute
foreach ($view->children['orders']->vars['choices'] as $id => $choice) {
$additionalAttributes[$id] = array(
'data-cost' => $this->propertyAccessor->getValue($choice->data, 'myMethod'),
'disabled' => 'disabled',
);
}
foreach ($view->children['orders']->children as $id => $child) {
$child->vars['attr'] = array_replace(
isset($child->vars['attr']) ? $child->vars['attr'] : array(),
$additionalAttributes[$id]
);
}
}
Symfony2 Form – add attribute tag option in select field type
答案 5 :(得分:1)
要根据该选项的值添加自定义属性,请考虑使用ChoiceType字段的<suite-file path="android_Suite1.xml" />
<suite-file path="ios_Suite1.xml" />
<suite-file path="android_Suite2.xml" />
<suite-file path="ios_Suite2.xml" />
<suite-file path="android_Suite3.xml" />
<suite-file path="ios_Suite3.xml" />
选项。
例如,如果要将json编码实体传递给该选项,可以使用以下内容:
choice_attr