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.