繁体   English   中英

实体选择列表形式中的其他

[英]other in entity choice list form

我是symfony的新手。 我有一个下拉列表,其中包含从DB中获取的数据。

$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_category”输入字段,否则将其隐藏。 在此代码的帮助下,添加了“其他”以进行下拉。

public function finishView(FormView $view, FormInterface $form, array $options)
{
    $new_choice = new ChoiceView(array(), 'other', 'Other');
    $view->children['category']->vars['choices'][] = $new_choice;
}

如果从下拉菜单中选择了一个选项,则该表格可以正常工作。 数据存储无误。 但是,如果用户选择“其他”并输入新的类别,则页面将在类别选项下重新加载“此值无效”,并且用户输入的“ other_category”没有表单验证。

有人可以在表单验证以及输入新类别方面为我提供帮助,还是建议实现上述功能的更好方法。

由于表单字段类型为Entity,所以发生验证错误,但没有标识值为“ other”的“ MyBundle:category”实体。

您尚未在实体表单类型中指定“ choice_label”属性,因此我假设您的“ MyBundle:category”实体具有__toString()函数。 这意味着“ MyBundle:category”实体都不会在其__toString()函数中返回“ other”。

我现在可以想到两种解决方案:


1)添加一个值为“ other”的“ MyBundle:category”实体。 这是最简单的方法,但是可以肯定地说,您不希望数据库中存在这样的类别。

2)预先从控制器中加载“ MyBundle:category”实体的列表,将它们构建到关联数组中,将“ other”选项附加到数组中,然后将该数组传递给表单。 您需要将“实体”表单类型交换为“ 选择”类型,并使用“类别”数组作为选择。

如果您的表单是FormType类,则需要将数组与类构造函数一起传递。


如果您不介意在类别表中创建一个带有“其他”值的新类别,只需添加它即可。 否则,请选择选项2,该选项与收到提交的表单后所做的操作没有太大区别,因为该表单字段始终未映射到实体属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM