表单 – Symfony2 – 动态表单选择 – 验证删除

前端之家收集整理的这篇文章主要介绍了表单 – Symfony2 – 动态表单选择 – 验证删除前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个下拉表单元素.最初它开始是空的,但是在用户进行了一些交互之后,它通过javascript填充了值.多数民众赞成.但是当我提交它时总是返回验证错误这个值无效.

如果我将项目添加到表单代码中的选项列表中,它将验证确定,但我正在尝试动态填充它,并且预先将项目添加到选项列表不起作用.

我认为这个问题是因为表单正在验证一个空的项目列表.我根本不希望它根据列表进行验证.我已将验证设置为false.我将chocie类型切换为文本,并始终通过验证.

这只会针对添加到选项列表中的空行或项进行验证

$builder->add('verified_city','choice',array(
  'required' =>  false
));

类似的问题在这里没有得到回答.
Validating dynamically loaded choices in Symfony 2

假设你不知道所有可用的选择是什么.它可以从外部Web源加载?

解决方法

经过多年的努力,试图找到它.你基本上需要添加一个PRE_BIND监听器.在绑定准备验证的值之前,您可以添加一些额外的选择.
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;


public function buildForm(FormBuilderInterface $builder,array $options)
{

  // .. create form code at the top

    $ff = $builder->getFormFactory();

    // function to add 'template' choice field dynamically
    $func = function (FormEvent $e) use ($ff) {
      $data = $e->getData();
      $form = $e->getForm();
      if ($form->has('verified_city')) {
        $form->remove('verified_city');
      }


      // this helps determine what the list of available cities are that we can use
      if ($data instanceof  \Portal\PriceWatchBundle\Entity\PriceWatch) {
        $country = ($data->getVerifiedCountry()) ? $data->getVerifiedCountry() : null;
      }
      else{
        $country = $data['verified_country'];
      }

      // here u can populate choices in a manner u do it in loadChoices use your service in here
      $choices = array('','','Manchester' => 'Manchester','Leeds' => 'Leeds');

      #if (/* some conditions etc */)
      #{
      #  $choices = array('3' => '3','4' => '4');
      #}
      $form->add($ff->createNamed('verified_city',null,compact('choices')));
    };

    // Register the function above as EventListener on PreSet and PreBind

    // This is called when form first init - not needed in this example
    #$builder->addEventListener(FormEvents::PRE_SET_DATA,$func); 

    // called just before validation 
    $builder->addEventListener(FormEvents::PRE_BIND,$func);  

}
原文链接:https://www.f2er.com/html/232208.html

猜你在找的HTML相关文章