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

Personalizar validaciones con doctrine

Estas en el tema de Personalizar validaciones con doctrine en el foro de Symfony en Foros del Web. Buenas tardes amigos! Estoy empezando con Symfony 2 y trabajando con Doctrine he generado un CRUD, donde el formulario que se muestra al usuario final, ...
  #1 (permalink)  
Antiguo 27/01/2015, 14:42
 
Fecha de Ingreso: marzo-2013
Mensajes: 31
Antigüedad: 5 años, 5 meses
Puntos: 0
Personalizar validaciones con doctrine

Buenas tardes amigos!

Estoy empezando con Symfony 2 y trabajando con Doctrine he generado un CRUD, donde el formulario que se muestra al usuario final, envía un tooltip si no se ha completado algún campo obligatorio.

Ahora bien quisiera hacer lo mismo pero cuando se intente ingresar un dato repetido a mi base de datos, es decir, enviar un mensaje personalizado que muestre el error y ayude al usuario a corregirlo.

Muchas gracias
  #2 (permalink)  
Antiguo 27/01/2015, 15:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.921
Antigüedad: 5 años, 1 mes
Puntos: 361
Respuesta: Personalizar validaciones con doctrine

Esta parte de la documentación te puede interesar:
http://symfony.com/doc/current/refer...queEntity.html
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 27/01/2015, 15:29
 
Fecha de Ingreso: marzo-2013
Mensajes: 31
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Personalizar validaciones con doctrine

Voy a revisarlo hhs Muchas Gracias!
  #4 (permalink)  
Antiguo 28/01/2015, 08:33
 
Fecha de Ingreso: marzo-2013
Mensajes: 31
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Personalizar validaciones con doctrine

No se sirvió! O creo que no lo se usar xD

utilizo el método loadValidatorMetadata igual que lo implementan en el ejemplo fields, errorPath y el message pero no me sale el mensaje!

Ahora mi pregunta es ¿Será que hay que hacer algo adicional?
  #5 (permalink)  
Antiguo 28/01/2015, 12:07
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.921
Antigüedad: 5 años, 1 mes
Puntos: 361
Respuesta: Personalizar validaciones con doctrine

Publica como estas implementando la validación en tu entidad
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 28/01/2015, 12:38
 
Fecha de Ingreso: marzo-2013
Mensajes: 31
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Personalizar validaciones con doctrine

La cosa es que no pueden existir 2 o mas descripciones IGUALES bajo el mismo código y el codigo debe ser único
Por ejemplo:
001 Inglés (Válido)
002 Biología (Válido)
003 Inglés (Válido)

001 Química (Inválido)
014 Química (Válido)


Lo que no tengo claro es desde donde debo llamar a ese método ó si debe estar en otro sitio, es algo que no lo entiendo aún---

Código:
namespace TCG\DGeneralBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Ddescasignatura
 * 
 * @ORM\Table(name="ddescasignatura")
 * @ORM\Entity(repositoryClass="DdescasignaturaRepository")
 */
class Ddescasignatura
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="ddescasignatura_id_seq", allocationSize=1, initialValue=1)
     */
    private $id;
    
    /**
     * @var string
     *
     * @ORM\Column(name="codigo", type="string", length=10, nullable=true)
     */
    private $codigo;

    /**
     * @var string
     *
     * @ORM\Column(name="descripcion", type="string", length=60, nullable=false)
     */
    private $descripcion;

    /**
     * @var \Idioma
     *
     * @ORM\ManyToOne(targetEntity="Idioma")
     * @ORM\JoinColumn(name="idioma_id", referencedColumnName="id")
     */
    private $idioma;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set codigo
     *
     * @param string $codigo
     * @return Ddescasignatura
     */
    public function setCodigo($codigo)
    {
        $this->codigo = $codigo;

        return $this;
    }

    /**
     * Get codigo
     *
     * @return string 
     */
    public function getCodigo()
    {
        return $this->codigo;
    }

    /**
     * Set descripcion
     *
     * @param string $descripcion
     * @return Ddescasignatura
     */
    public function setDescripcion($descripcion)
    {
        $this->descripcion = $descripcion;

        return $this;
    }

    /**
     * Get descripcion
     *
     * @return string 
     */
    public function getDescripcion()
    {
        return $this->descripcion;
    }

    /**
     * Set idioma
     *
     * @param \TCG\DGeneralBundle\Entity\Idioma $idioma
     * @return Ddescasignatura
     */
    public function setIdioma(\TCG\DGeneralBundle\Entity\Idioma $idioma = null)
    {
        $this->idioma = $idioma;

        return $this;
    }

    /**
     * Get idioma
     *
     * @return \TCG\DGeneralBundle\Entity\Idioma 
     */
    public function getIdioma()
    {
        return $this->idioma;
    }
    
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addConstraint(new UniqueEntity(array(
            'fields'    => array('codigo', 'descripcion'),
            'errorPath' => 'descripcion',
            'message'   => 'Ya ha ingresado una descripción con el mismo código.',
        )));
    }
}

Última edición por norbbs; 28/01/2015 a las 13:39
  #7 (permalink)  
Antiguo 28/01/2015, 14:49
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.921
Antigüedad: 5 años, 1 mes
Puntos: 361
Respuesta: Personalizar validaciones con doctrine

Solo necesitas agregar la notación para utilizar la validación al principio de la clase.
Código PHP:
Ver original
  1. namespace TCG\DGeneralBundle\Entity;
  2.  
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Symfony\Component\Validator\Mapping\ClassMetadata;
  5. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  6.  
  7. /**
  8.  * Ddescasignatura
  9.  *
  10.  * @ORM\Table(name="ddescasignatura")
  11.  * @ORM\Entity(repositoryClass="DdescasignaturaRepository")
  12.  * @UniqueEntity(
  13.  *     fields={"codigo", "descripcion"},
  14.  *     errorPath="descripcion",
  15.  *     message="Ya ha ingresado una descripción con el mismo código."
  16.  * )
  17.  */
  18. class Ddescasignatura
  19. {
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 29/01/2015, 20:16
 
Fecha de Ingreso: marzo-2013
Mensajes: 31
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Personalizar validaciones con doctrine

Pues no se que pase pero no me funciona! Ok no me deja agregar el campo repetido esta perfecto pero el mensaje nunca lo muestra
  #9 (permalink)  
Antiguo 30/01/2015, 08:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.921
Antigüedad: 5 años, 1 mes
Puntos: 361
Respuesta: Personalizar validaciones con doctrine

Eso es raro, necesitas revisar el código en tu forma, también es posible tener problemas si estas usando formulario embebidos.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: doctrine, personalizar
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 19:05.