Tengo un formulario como el siguiente.
// AppBundle\Form\TestType.php //... ->add('fecha', null, array( 'widget' => 'single_text' )) //...
Al generar un CRUD todo me funciona perfecto. El problema está cuando trato de insertar un registro con fecha: 1969/04/27
Esto me está pasando con la versión 2.7.1 de Symfony. No he probado con otra.
Respuestas
Buenas, ¿cuál problema estás teniendo exactamente? es decir, ¿cuál es el error que te muestra PHP?
@manuel_j555
El problema es simple. Sucede que cuando pongo la fecha 1969/04/27
me dice "This value is not valid". Acabo de probar con la versión 2.6 y me pasa lo mismo. He probado en tres proyectos de Symfony diferentes y al parecer es algo con el validador.
Eso sólo me sucede con esa fecha. Con cualquier otra todo funciona perfecto.
@sf_yasel
Prueba a especificar la opción format
del campo de tipo date
a ver si se soluciona el problema:
http://symfony.com/doc/current/reference/forms/types/date.html#format
->add('fecha', null, array( 'widget' => 'single_text', 'format' => 'yyyy/MM/dd' ))
Saludos!!!
@manuel_j555
Sigue sin funcionar. Trata de probarlo a ver si te da ese problema tambien.
@sf_yasel
¿Puedes probar cualquier otra fecha anterior al 1 de enero de 1970 para ver si también da error? ¿Puedes probar después con cualquier fecha posterior al 1 de enero de 1970 para ver si funciona bien?
También me gustaría saber quién está generando el mensaje "This value is not valid". ¿Puedes pasarnos algo de información de la traza de error que se muestra por pantalla?
@javiereguiluz
Gracias por la respuesta Javier. Me sucede sólo con esa fecha. Es un sistema que registra personas y sólo falla con una persona que nació en esa fecha 1969/04/27
.
He generado otro proyecto de prueba y me da el mismo problema, incluso en servidores distintos y con versiones de Symfony distintas.
He revisado un poco en el núcleo de Symfony y algo extraño pasa.
//DateTimeToLocalizedStringTransformer.php public function reverseTransform($value) { if (!is_string($value)) { throw new TransformationFailedException('Expected a string.'); } if ('' === $value) { return; } //en el caso de la fecha 1969/04/27 $timestamp me retorna false $timestamp = $this->getIntlDateFormatter()->parse($value);
El error en el profiler de formularios es:
Symfony\Component\Validator\ConstraintViolation Object(Symfony\Component\Form\Form).children[fecha] = 1969/04/27 Caused by: Symfony\Component\Form\Exception\TransformationFailedException Unable to reverse value for property path "fecha": Date parsing failed: U_PARSE_ERROR Caused by: Symfony\Component\Form\Exception\TransformationFailedException Date parsing failed: U_PARSE_ERROR
@sf_yasel
Un amigo stackoverflow en me respondió esto y realmente me funciona, lo que sólo para cuando la localización es inglés.
http://stackoverflow.com/questions/31418877/symfony2-and-1969-04-27-date/31432909#31432909
@sf_yasel
Acabo de hacer unas pruebas y me ha funcionado bien con 1969/04/27
, y otras fechas.
Cuando me fallaba era cuando manejaba un formato diferente al indicado en la opción format.
Prueba a colocar el tipo de campo al crear el de la fecha:
->add('fecha', 'date', array( 'widget' => 'single_text', 'format' => 'yyyy/MM/dd' ))
Saludos!
@manuel_j555