symfony如何使用验证器

时间:2017-01-04 16:24:08

标签: php validation symfony

大家好,我有一个车辙场,我想对这个领域进行验证,但不知道在哪里。

我的用户类有id,rut(字符串)和name(字符串)。

我必须创建一个新类来验证rut ??

my usertype

class UsuariosType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('rut')
            ->add('nombre');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Paginas\UsuariosBundle\Entity\Usuarios'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'paginas_usuariosbundle_usuarios';
    }
}

控制器

class DefaultController extends Controller
{   
    public function agregarAction()
    {   
        $usuario=new Usuarios();
        $form=$this->createForm(new UsuariosType(), $usuario);

        $request = $this->getRequest();

        if ($request->getMethod() == 'POST') {  
        $form->bind($this->getRequest());

            if ($form->isValid()) { 
                $usuario=$form->getData();      

                $em=$this->getDoctrine()->getManager();
                $em->persist($usuario);
                $em->flush();

                $product=$em->getRepository('PaginasUsuariosBundle:Usuarios')->findAll();

                //redirecciona al listar
                return $this->redirectToRoute('usuario_lista');
            }
        }
    }
}   
  • 列出项目

    返回$ this->渲染(' PaginasUsuariosBundle:默认:crear_usuario.html.twig',     数组('形式' => $ form-> createView() ));

我在网上发现了这个...但是不知道如何使用它们来验证车辙场。

rut.php

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Exception\MissingOptionsException;

/**
 * @Annotation
 */
class Rut extends Constraint
{
    public $message = 'this value is not a valid RUT';

    public function __construct($options = null)
    {
        parent::__construct($options);
    }
}

rutvalidator.php

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class RutValidator extends ConstraintValidator
{
    /**
     * {@inheritDoc}
     */
    public function validate($value, Constraint $constraint)
    {
        $r = strtoupper(str_replace(array(".", "-"), "", $value));
        $sub_rut = substr($r, 0, strlen($r) - 1);
        $sub_dv = substr($r, - 1);
        $x = 2;
        $s = 0;

        for ($i = strlen($sub_rut) - 1; $i >= 0; $i--) {
            if ($x > 7) {
                $x = 2;
            }
            $s += $sub_rut[$i] * $x;
            $x++;
        }
        $dv = 11 - ($s % 11);
        if ($dv == 10) {
            $dv = 'K';
        }
        if ($dv == 11) {
            $dv = '0';
        }
        if ($dv != $sub_dv) {
            $this->context->addViolation($constraint->message, array('%string%' => $value));
        }
    }
}

有人可以帮助我,请问我应该把这些文件放在哪里(rut和rutvalidator)以及我如何调用它们...是在usertype还是控制器?

0 个答案:

没有答案