La primera es: ¿Como puedo controlar los errores SQL? Por ejemplo cuando intentan registrar un usuario que ya existe en la BBDD salta una excepcion porque el nombre de usuario se repite, y tiene la restriccion unique. Ahora mismo lo tengo solucionado con:
Código:
Luego otra duda es con los mensajes de error de los formularios, en la plantilla tengo la lineatry { $em->persist($usuario); $em->flush(); return $this->redirect($this->generateUrl('login', array('insercion'=>1))); } catch (\Exception $e) { $error = 1; }
{{form_errors(form)}} que si no me equivoco muestra todos los errores al validarlo.
Pero no logro que me muestre ninguno ni el de la norma de validación:
Código:
Ni el campo repeated de la pass:AppBundle\Entity\Usuarios: properties: user: - NotBlank: ~ - Length: min: 2 minMessage: el nick es muy corto
Código:
mi plantilla:<?php namespace AppBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class RegistroType extends AbstractType { /* * Define los campos del formulario */ public function buildForm(FormBuilderInterface $builder, array $options) { // el boton de envio se recomienda incluirlo en la plantilla $builder ->add('user', 'text', array('label'=>'Nombre de usuario: ')) ->add('email', 'email', array('label'=>'Email: ')) // crea dos campos que tienen que tienen que coincidir ->add('password', 'repeated', array('type' => 'password', 'invalid_message' => 'Los campos de las contraseñas no coinciden.', 'required' => true, 'first_options' => array('label' => 'Contraseña: '), 'second_options' => array('label' => 'Repetir contraseña: '))) ; } /* * Indica la entidad cuyos datos modifica el formulario */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array('data_class' => 'AppBundle\Entity\Usuarios')); } /* * Define el nombre único del formulario */ public function getName() { return 'registro'; } }
Código:
{% extends '::base.html.twig' %} {% block title %}Registro de nuevo usuario{% endblock %} {% block body %} <div id="registro"> <form method="post" {{ form_enctype(form) }}> {{form_errors(form)}} {{form_label(form.user)}}<br /> {{form_widget(form.user)}}<br /> {{form_label(form.email)}}<br /> {{form_widget(form.email)}}<br /> {{form_label(form.password.first)}}<br /> {{form_widget(form.password.first)}}<br /> {{form_label(form.password.second)}}<br /> {{form_widget(form.password.second)}}<br /> {{form_widget(form)}} <input type="submit" value="Registrar" /> </form> </div> <div id="login"> <a href="{{path('login')}}">Acceder como usuario</a> </div> {% endblock %}
La ultima duda me surge de una combinación de estas 2, ¿hay alguna forma de poderle añadir un error a la lista de errores del formulario para que lo muestre, sin tener que hacerlo a mano?
Gracias.