Php Symfony2中已弃用的方法addValidation和类CallbackValidator
我有个问题。我需要验证表单类型类中实体中不存在的字段。我以前使用过以下代码:Php Symfony2中已弃用的方法addValidation和类CallbackValidator,php,symfony-2.1,Php,Symfony 2.1,我有个问题。我需要验证表单类型类中实体中不存在的字段。我以前使用过以下代码: $builder->addValidator(new CallbackValidator(function(FormInterface $form){ if (!$form['t_and_c']->getData()) { $form->addError(new FormError('Please accept the terms and conditions in order
$builder->addValidator(new CallbackValidator(function(FormInterface $form){
if (!$form['t_and_c']->getData()) {
$form->addError(new FormError('Please accept the terms and conditions in order to registe'));
}
}))
但是由于symfony2.1方法
addValidator
和类CallbackValidator
被弃用。有人知道我应该使用什么吗?该接口FormValidatorInterface
已被弃用,将在Symfony 2.3中删除
如果使用此接口实现了自定义验证器,则可以
用事件侦听器代替它们,以侦听
FormEvents::POST_BIND
(或任何其他*BIND
事件)。万一
您使用了CallbackValidator类,现在应该传递回调
直接发送到addEventListener
通过我是这样做的:
add('t_and_c', 'checkbox', array(
'property_path' => false,
'constraints' => new True(array('message' => 'Please accept the terms and conditions in order to register')),
'label' => 'I agree'))
对于希望获得帮助将其验证器更改为事件订阅者的任何其他人(因为它与普通订阅者略有不同),请执行以下操作: 第一步 更改:
$builder->addValidator(新的AddNameFieldValidator())代码>
到
$builder->addEventSubscriber(新的AddNameFieldSubscriber())代码>
步骤2
将验证器类(以及所有名称空间)替换为订阅者类。
您的订阅服务器类应如下所示:
// src/Acme/DemoBundle/Form/EventListener/AddNameFieldSubscriber.php
namespace Acme\DemoBundle\Form\EventListener;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormError;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AddNameFieldSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::POST_BIND => 'postBind');
}
public function postBind(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
$form->addError(new FormError('oh poop'))
}
}
您不需要在服务文件(yml或其他)中注册订户。
参考:
CallbackValidator
并没有被弃用,事实上,它是。太棒了!谢谢你发布这个!使用Symfony\Component\Validator\Constraints\True;谢谢你的回复!请注意,您应该将答案的重要部分发布在此网站上,否则您的帖子可能会被删除。如果您愿意,您可以继续添加该链接,但仅作为“参考”。答案应独立,无需链接。答案已修改。