Я пытаюсь проверить несвязанное поле в моей форме 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'; } }
Моя ошибка:
Catchable Fatal Error: аргумент 1 передан в Symfony \ Component \ Form \ FormBuilder :: addValidator () должен реализовать интерфейс 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
Итак, для тех, кто еще нуждается в проверке для несвязанных полей формы в 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
.