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


how to add validation to unbound form field in symfony2

我正在尝试验证我的symfony2表单中的未绑定字段。

我已经用谷歌搜索了它并找到了几个类似的解决方案,所以我做了一个复制粘贴并将我自己的东西放在那里,但它对我不起作用。我读过的所有解决方案中可能都缺少一个使用语句或某些内容,省略了,因为每个人都知道它们是必要的。.除了这里的菜鸟。

我的代码:

<?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';
    }
}

我的错误:

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

因此,对于需要验证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';
    }
}

CallbackValidator FQCN应该是Symfony'Component'Form'CallbackValidator