Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/05/2015, 06:27
Numon
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 7 meses
Puntos: 0
Mensajes de error en formularios

Hola tengo algunas dudas que no he conseguido encontrar en la documentación.

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:
try {
	$em->persist($usuario);
	$em->flush();
	return $this->redirect($this->generateUrl('login', array('insercion'=>1)));
} catch (\Exception $e) {
	$error = 1;			
}
Luego otra duda es con los mensajes de error de los formularios, en la plantilla tengo la linea
{{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:
AppBundle\Entity\Usuarios:
    properties:
        user:
            - NotBlank: ~
            - Length:
                min: 2
                minMessage: el nick es muy corto
Ni el campo repeated de la pass:

Código:
<?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';
	}
	
}
mi plantilla:

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.