如何为symfony2中的未绑定表单字段添加验证 [英] how to add validation to unbound form field in symfony2

查看:135
本文介绍了如何为symfony2中的未绑定表单字段添加验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在我的symfony2表单中验证一个未绑定的字段。

I am trying to validate an unbound field in my symfony2 form.

我搜索了它并发现了几个类似的解决方案,所以我做了一个复制粘贴,我自己的东西在那里,但它不适合我。可能有一条使用声明或者是我读过的所有解决方案中都没有的东西,因为每个人都知道它们是必要的,所以省略了......除了这里的菜鸟。

I have googled it and found several similar solutions, so I did a copy-paste and put my own stuff in there, but it doesn't work for me. There is probably a use statement or something that was missing from all the solutions I read, omitted because everyone would know them to be necessary.. .except the rookie here that is.

我的代码:

My code:

<?php

namespace BizTV\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

use Symfony\Component\Validator\Constraints\CallbackValidator as CallbackValidator;
use Symfony\Component\Form\FormValidatorInterface;

use Doctrine\ORM\EntityRepository;

class newServerType extends AbstractType
{

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

        $builder
            ->add('company', 'entity', array(
                'label' => 'Vilket företag tillhör servern? ',
                'multiple' => FALSE,
                'expanded' => FALSE,
                'property' => 'companyName',
                'class'    => 'BizTV\BackendBundle\Entity\company',
            ));     

        $builder->add('screenName', null, array('property_path' => false, 'label' => 'Namn på skärmen (användaren kan ändra det senare) '));

        $builder-> addValidator(new CallbackValidator(function(FormInterface $form){
          $screenName = $form['screenName'];
            if (empty($screenName)) {
              $form['screenName']->addError(new FormError("Du måste ange ett namn för den nya skärmen"));
            }
        }));

        $builder
            ->add('username', 'text', array('label' => 'Servernamn (endast för serverns login samt vår referens)'))            
            ->add('plainPassword', 'repeated', array('type' => 'password', 'first_name' => 'Lösenord för server ', 'second_name' => 'Upprepa lösenord för server',));

    }

    public function getName()
    {
        return 'biztv_userbundle_newservertype';
    }
}

我的错误:

My error:


可捕获的致命错误:传递给Symfony的参数1 \ Component \ Form \ FormBuilder :: addValidator()必须实现接口Symfony \ Component \ Form \ FormValidatorInterface ,在第35行调用的/var/www/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php中给出并在/ var / www / biztv_symfony中定义的Symfony \ Component \Validator\Constraints\CallbackValidator的实例/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php line 255

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\FormBuilder::addValidator() must implement interface Symfony\Component\Form\FormValidatorInterface, instance of Symfony\Component\Validator\Constraints\CallbackValidator given, called in /var/www/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php on line 35 and defined in /var/www/biztv_symfony/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php line 255


推荐答案

因此,对于需要验证symfony 2中的未绑定表单字段的其他人,我是如何做到的 - 原来我错过了一堆使用语句,它们没有列在任何发现其他线程的网站上关于这个问题。

So, for anyone else needing validation for unbound form fields in symfony 2 here Is how I ended up doing it - turned out I was missing a bunch of use statements, they weren't listed on any of the sites where I found other threads on the subject.

我已经清除了除了必需品之外的所有东西。感谢m2mdas帮助我完成这项工作。

I have weeded out everything but the essentials. Thanks to m2mdas for helping me along on this one.

<?php

namespace BizTV\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\CallbackValidator;
use Symfony\Component\Form\FormValidatorInterface;
use Symfony\Component\Form\FormError;


use Doctrine\ORM\EntityRepository;

class newServerType extends AbstractType
{

    public function buildForm(FormBuilder $builder, array $options)
    {   
        $builder->add('screenName', null, array('property_path' => false, 'label' => 'Namn på skärmen (användaren kan ändra det senare) '));

        $builder-> addValidator(new CallbackValidator(function(FormInterface $form){
          $screenName = $form->get('screenName')->getData();
            if (empty($screenName)) {
              $form['screenName']->addError(new FormError("Du måste ange ett namn för den nya skärmen"));
            }
        }));    
    }

    public function getName()
    {
        return 'biztv_userbundle_newservertype';
    }
}

这篇关于如何为symfony2中的未绑定表单字段添加验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆