Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

No se ejecutan las validaciones tipo @Assert

22 de febrero de 2016

Estoy desarrollando bajo symfony 2.4 y base de datos SQLServer. En mi entidad defino la longitud máxima de los campos con @Assert\Length(max=50), pero a la hora de hacer el submit del formulario se salta la validación y da un error de base de datos si el campo tiene más de 50 caracteres.

He seguido los ejemplos del libro de Javier Eguiluz, pero a mí no me funciona.

¿Qué puede estar pasando? Gracias de antemano Ana


/* Clase Almacén */
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
 
class Almacen
{
 
 /* Otras declaraciones */
/**
* @var string
*
* @ORM\Column(name="DomCalle_Alm", type="string",length=50, nullable=true)
* @Assert\Length(max=50)
*/
    protected $calle;
}
------------------------
/* Formulario */
     ->add('calle', 'text',     array('required' => false))

Respuestas

#1

Tienes activada la validación por anotaciones en el config.yml?

framework:
    validation: { enable_annotations: true }

@diegotham

23 febrero 2016, 19:42
#2

@diegotham, sí que la tengo activada. Lo que tengo distinto a los proyectos que he consultado es que yo trabajo con dos entity managers, uno contra MySql y otro contra SQLServer, pero en ninguno, me funcionan los assert.

La parte de framework de mi fichero config.yml es:

framework:
    #esi:             ~
    #translator:      { fallback: "%locale%" }
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        # handler_id set to null will use default session handler from php.ini
        handler_id:  ~
    fragments:       ~
    http_method_override: true

Y la de config_dev.yml, la siguiente:

framework:
    router:
        resource: "%kernel.root_dir%/config/routing_dev.yml"
        strict_requirements: true
    profiler: { only_exceptions: false }

Mientras soluciono el problema, voy a limitar la entrada de caracteres mediante HTML, indicándolo en el campo del formulario:

->add('calle', 'text', array('required' => false,
                           'attr' => array('maxlength' => 50, 'minlength' => 3)))

Gracias

@abmelgarejo

25 febrero 2016, 9:36