【问题标题】:how to add validation to unbound form field in symfony2如何在 symfony2 中向未绑定的表单字段添加验证
【发布时间】:2012-08-13 06:59:12
【问题描述】:

我正在尝试验证 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';
    }
}

我的错误:

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

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    所以,对于其他需要验证 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';
        }
    }
    

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如您所说更改了 USE,我收到类似的错误消息:可捕获的致命错误:传递给 BizTV\UserBundle\Form\{closure}() 的参数 1 必须是 BizTV\UserBundle\ 的实例Form\FormInterface,在 /var/www/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php 第 30 行中给出的 Symfony\Component\Form\Form 实例
    • 在使用部分添加use Symfony\Component\Form\FormInterface;。
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2015-02-23
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多