2

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は、/ var/wwwで呼び出されたSymfony\Component \ Validator \ Constraints\CallbackValidatorのインスタンスであるインターフェースSymfony\Component \ Form\FormValidatorInterfaceを実装する必要があります/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php行35で、/ var / www / biztv_symfony / vendor / symfony / src / Symfony / Component / Form/FormBuilder.php行255で定義されています

4

2 に答える 2

5

だから、ここで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';
    }
}
于 2012-08-17T18:55:34.620 に答える
2

CallbackValidatorFQCNはである必要がありますSymfony\Component\Form\CallbackValidator

于 2012-08-16T21:21:30.500 に答える