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

Php 如何向symfony2中的未绑定表单字段添加验证,php,forms,symfony,Php,Forms,Symfony,我正在尝试验证symfony2表单中的未绑定字段 我在谷歌上搜索了一下,找到了几个类似的解决方案,所以我做了一个复制粘贴,把我自己的东西放在那里,但它对我不起作用。我读到的所有解决方案中可能都缺少一个use语句或某些东西,省略了,因为每个人都知道它们是必要的。除了这里的新秀 我的代码: <?php namespace BizTV\UserBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component

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

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

我的代码:

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

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

因此,对于任何其他需要验证Symfony 2中未绑定表单字段的人,我就是这样做的-结果是我缺少了一堆use语句,我在任何一个网站上都找不到关于这个主题的其他帖子

除了必需品,我什么都删掉了。感谢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';
    }
}

更改了使用,正如您所说,我收到了类似的错误消息:可捕获的致命错误:传递给BizTV\UserBundle\Form\{Close}()的参数1必须是BizTV\UserBundle\Form\Form接口的实例,/var/www/biztv_Symfony/src/biztv/UserBundle/Form/newServerType.php第30Add
行中给出的Symfony\Component\Form\Form的实例使用Symfony\Component\Form\Form界面在使用部分。此方法在2.1中不推荐使用。有关更多详细信息,请参阅以下线程:调用未定义的方法Symfony\Component\Form\FormBuilder::addValidator()