Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Mensajes de error en formularios

Estas en el tema de Mensajes de error en formularios en el foro de Symfony en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/05/2015, 06:27
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 4 años, 4 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.
  #2 (permalink)  
Antiguo 04/05/2015, 07:51
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 1 mes
Puntos: 379
Respuesta: Mensajes de error en formularios

Cita:
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:
UniqueEntity cubre este tipo de escenarios: http://symfony.com/doc/current/refer...queEntity.html
Cita:
{{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:
De la forma en que lo estas usando solo aplica al form padre, si quieres ver lo errores por campo requieres agregar el form_errors a cada campo ve la documentación: http://symfony.com/doc/current/book/...-field-by-hand, http://symfony.com/doc/current/refer...rm-errors-view.
Cita:
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?
A que te refieres con esto ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 04/05/2015, 08:33
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 4 años, 4 meses
Puntos: 0
Respuesta: Mensajes de error en formularios

Muchas gracias es justo lo que necesitaba UniqueEntity. Estaba editando justo cuando has contestado, me di cuanta de que tenia que poner los errores de cada campo, gracias igualmente.

Lo último, no me he explicado nada bien, y realmente me he dado cuenta que si realizo las comprobaciones por validación no lo necesito.

Si se me permite preguntar una última duda.
Cuando el resultado de un formulario es correcto, realizo la acción correspondiente y cambio a otra página con un GET. El cual tiene un valor para indicar que se ha registrado el formulario correctamente, para luego mostrar un mensaje indicándolo.

Ejemplo:
Código:
return $this->redirect($this->generateUrl('login', array('insercion'=>1)));
// 'insercion' con valor 1, indica que se ha insertado un nuevo usuario.
Al ir al login muestro un mensaje que indica al usuario que el registro se ha realizado con éxito.
Mis preguntas son si esta forma de realizarlo es correcta , si alguna otra mejor o más correcta.

Gracias

Última edición por Numon; 04/05/2015 a las 08:37 Razón: Ortografía
  #4 (permalink)  
Antiguo 04/05/2015, 09:06
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 1 mes
Puntos: 379
Respuesta: Mensajes de error en formularios

Si inserción lo envias como una forma de lanzar un mensaje de exito es mucho mejor utiliza una notificación ve la documentación: http://symfony.com/doc/current/book/...flash-messages
Existen otras formas pero creo que es lo que estas buscando
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: form, formularios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:21.