如何在symfony2中向未绑定的表单字段添加验证

Mat*_*der 2 php forms symfony

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

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

我的代码:

<?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';
    }
}
Run Code Online (Sandbox Code Playgroud)

我的错误:

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

Mat*_*der 5

因此,对于需要在symfony 2中对未绑定表单字段进行验证的其他人,这里是我最终如何做到这一点 - 结果我错过了一堆使用语句,它们没有列在我找到其他线程的任何网站上主题.

我已经淘汰了除了必需品之外的所有东西.感谢m2mdas帮助我解决这个问题.

<?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';
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此方法在2.1中已弃用.有关更多详细信息,请参阅以下主题:http://stackoverflow.com/questions/12911686/symfony-validate-form-with-mapped-false-form-fields (2认同)