Php 其他实体选择列表形式
我是新来的。我在表单中有一个下拉列表,其中包含从DB获取的数据Php 其他实体选择列表形式,php,jquery,forms,symfony,Php,Jquery,Forms,Symfony,我是新来的。我在表单中有一个下拉列表,其中包含从DB获取的数据 $builder->add('category', 'entity', array( 'label' => 'category', 'class' => 'MyBundle:category', 'expanded' => false, 'multiple' => false, 'mapped' => false,
$builder->add('category', 'entity', array(
'label' => 'category',
'class' => 'MyBundle:category',
'expanded' => false,
'multiple' => false,
'mapped' => false,
'empty_value' => 'category'
));
$builder->add('other_category', 'text', array(
'label' => 'category',
'required' => false,
'invalid_message' => 'Please enter a valid category',
'mapped' => false,
));
用户还可以向表中添加新类别。从下拉列表中选择“其他”时,将显示“其他类别”输入字段,否则将隐藏该字段。
“Other”是在该代码的帮助下添加到下拉列表中的
public function finishView(FormView $view, FormInterface $form, array $options)
{
$new_choice = new ChoiceView(array(), 'other', 'Other');
$view->children['category']->vars['choices'][] = $new_choice;
}
如果从下拉列表中选择了一个选项,则表单工作正常。数据存储时没有任何错误。但是,如果用户选择“其他”并输入一个新类别,页面将在类别选项下重新加载“此值无效”,并且用户输入的“其他类别”没有表单验证
是否有人可以帮助我进行表单验证以及输入新类别,或者建议更好的方法来实现上述功能。发生验证错误的原因是表单字段类型为Entity,但没有标识值为“other”的“MyBundle:category”实体 您尚未在实体表单类型中指定“choice\u label”属性,因此我将假定您的“MyBundle:category”实体具有一个\u toString()函数。这意味着没有任何“MyBundle:category”实体在其_toString()函数中返回“other” 我现在可以想出两种解决方法:
1) 添加一个值为“其他”的“MyBundle:category”实体。这是最简单的方法,但我们假定您不希望数据库中存在这样的类别 2) 提前从控制器加载“MyBundle:category”实体列表,将它们构建到关联数组中,将“other”选项附加到数组中,然后将该数组传递给表单。您需要将实体表单类型交换为类型,并使用categories数组作为选项 如果表单是FormType类,则需要将数组与类构造函数一起传入
如果你不介意在你的分类表中有一个带有“other”值的新分类,只需添加它即可。否则,选择选项2,这对您在收到提交的表单后的操作没有太大影响,因为此表单字段无论如何都没有映射到实体属性