【发布时间】:2016-05-06 09:30:23
【问题描述】:
在 Symfony 3 中,我希望选择列表菜单的“占位符”在进行任何选择之前出现,但不出现(或不可选择)在用户的可用选项列表中。
MyEntityType 的函数 buildForm(),扩展 AbstractType 如下所示:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$list = array([array with choices values and descriptions]);
$builder
->add('description',TextType::class, array('label'=>'trans.my_desc'))
->add('list',ChoiceType::class,array(
'label'=>'trans.my_list',
'multiple'=>false,
'choices'=>$list,
'placeholder'=>'trans.do_a_choice',
//'placeholder_in_choices'=>false //this option is not available
)
->add('submit',SubmitType::class,array('label'=>'trans.validate'));
}
当我查看文档时,我看到有一个布尔选项 placeholder_in_choices (http://symfony.com/doc/current/reference/forms/types/choice.html#field-variables) 但无法在“->add('list' ,ChoiceType::class,array([array of options for list])"(它会引发错误,说明 'placeholder_in_choices' 不是可用选项)。
通过我的搜索,我发现这个已经存在的问题与我很接近:Symfony how to disable the default option
通读之后,我尝试在 MyEntityType 类中实现 finishView() 函数:
public function finishView(FormView $view, FormInterface $form, array $options){
var_dump($view->children['list']->vars);
foreach ($view->children['list']->vars['choices'] as $sma) {
if ($sma->value == "") {
$sma->attr['disabled'] = 'disabled';
}
}
}
问题在于,正如 var_dump() 中所示,$view->children['list']->vars['choices'] 不包括 'placeholder' 值或标签(trans.do_a_choice ),因此不可能将“禁用”属性附加到它。
是否有人知道如何让“trans.do_a_choice”在选择菜单中显示为占位符,但在选项列表中不出现(或不可选择)?
【问题讨论】:
-
只需确保在现场将 required 设置为 true 即可?那么当表单设置了占位符设置时,会抛出错误,因为没有设置任何值...
-
我不确定我是否理解。您想要一个占位符显示,然后一旦用户单击下拉菜单,就会消失?如果是这样的话,那听起来更像是一个前端 (JS) 任务。
-
@LMS94 如果我在选择菜单中选择“trans.do_a_choice”,则
-
@Francesco Abeni,我不希望它一定会消失,我希望用户无法选择它(因此将
-
如果你想要做的是this,那么提供 disabled 属性的 Symfony 会很麻烦。我会为这样的任务使用 javascript,如果用户没有 javascript,表单验证将阻止发布默认值。
标签: symfony-forms symfony