Symfony 2 formularios (formatos de fecha)

1,576 views
Skip to first unread message

Danny alfonzo Viana perez

unread,
Apr 1, 2012, 7:17:58 PM4/1/12
to symfo...@googlegroups.com
Saludos, quería preguntarle lo siguiente:

1-. tengo un campo en mi entidad usuario, fecha de nacimiento:

   /**
     * @var datetime $fecha_nacimiento
     *
     * @ORM\Column(name="fecha_nacimiento", type="date")
     * @Assert\Date(message = "formato de fecha incorrecto")
     * 
     */
    private $fecha_nacimiento;


2-. luego en la definición de mi formulario de registro:

$builder
...
        ... todos los campos del form ...
        ...
->add('fecha_nacimiento', 'text', array('required' => true))  
;

3-. en mi plantilla de registro:

{{ form_widget(formulario.fecha_nacimiento, { 'attr': { 'class': 'calendario', 'readonly': 'readonly' } }) }}

y sobre el campo tengo el calendario datepicker de jquery UI que regresa al campo el siguiente formato: 1983-09-21

4-. ME SALE ESTE ERROR al tratar de registrarme:

Fatal error: Call to a member function format() on a non-object in /var/www/videosite.com/vendor/doctrine-dbal/lib/Doctrine/DBAL/Types/DateType.php on line 44

NOTA: cabe destacar que si uso la definición del form de esta manera:

$builder
...
        ... todos los campos del form ...
        ...
->add('fecha_nacimiento', 'birthday') 
;

si funciona pero la selección de la fecha de nacimiento es con combos de selección, como en los años noventa

PD: este mensaje también me salio una vez que trate de hacer una consulta de este tipo:

$hoy = new \DateTime('today');
    $oferta = $em->getRepository('OfertaBundle:Oferta')->findOneBy(array(
    'ciudad'            => 1,
    'fecha_publicacion' => $hoy->format('Y-m-d H:i:s')
));




JERONIMO SALAZAR RAMIREZ

unread,
Apr 2, 2012, 3:10:03 PM4/2/12
to symfo...@googlegroups.com
Estas ma al definir el widget en el form, revisa los widgets disponibles, debes de poner el que corresponde.

El 2 de abril de 2012 12:49, German Macas <gero...@hotmail.com> escribió:
Q tal
como tienes definida la funcion set de $fecha_nacimiento???

una solución fácil es cambiarle de tipo de dato a
$fecha_nacimiento:

   /**
     * @var string $fecha_nacimiento
     *
     * @ORM\Column(name="fecha_nacimiento", type="string" length="10")
     * @Assert\Date(message = "formato de fecha incorrecto")
     * 
     */
    private $fecha_nacimiento;

Solo eso


Date: Sun, 1 Apr 2012 16:17:58 -0700
From: dannyfi...@gmail.com
To: symfo...@googlegroups.com
Subject: [symfony-es] Symfony 2 formularios (formatos de fecha)
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es



--
-------------------------------------------------------
Si programas  en PHP, usa Symfony
-------------------------------------------------------
Navega mas seguro con FireFox
------------------------------------------------------


Message has been deleted

Danny alfonzo Viana perez

unread,
Apr 2, 2012, 4:32:26 PM4/2/12
to symfo...@googlegroups.com
la tengo definida como date, y no quiero guardar un string, sino una fecha, estoy aprendiendo y no quiero tomar atajos, quiero entender el problema, en especial porque el metodo format() no es encontrado.


On Monday, April 2, 2012 1:19:18 PM UTC-4:30, Gerod006 wrote:
Q tal
como tienes definida la funcion set de $fecha_nacimiento???

una solución fácil es cambiarle de tipo de dato a
$fecha_nacimiento:

   /**
     * @var string $fecha_nacimiento
     *
     * @ORM\Column(name="fecha_nacimiento", type="string" length="10")
     * @Assert\Date(message = "formato de fecha incorrecto")
     * 
     */
    private $fecha_nacimiento;

Solo eso


Date: Sun, 1 Apr 2012 16:17:58 -0700
From: dannyfi...@gmail.com
To: symfo...@googlegroups.com
Subject: [symfony-es] Symfony 2 formularios (formatos de fecha)

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+unsubscribe@googlegroups.com

German Macas

unread,
Apr 2, 2012, 4:57:20 PM4/2/12
to symfo...@googlegroups.com

Deberías definirlo de la siguiente manera:

->add('
fecha_nacimiento','date', array(
                'attr' => array('class' => 'calendario'),
                'widget' => 'single_text',
                'format' => 'yy-mm-dd',
                        ))

en jquery

$("form input.
fecha_nacimiento").datepicker({
    dateFormat: 'yy-mm-dd',
});

Puedes leer sobre esto en: http://gitnacho.github.com/symfony-docs-es/reference/forms/types/date.html


Att.

Germán Macas
@gerod006


Date: Mon, 2 Apr 2012 13:32:26 -0700
From: dannyfi...@gmail.com
To: symfo...@googlegroups.com
Subject: Re: [symfony-es] Symfony 2 formularios (formatos de fecha)
Para darte de baja, envía un email a symfony-es+...@googlegroups.com

Danny alfonzo Viana perez

unread,
Apr 2, 2012, 5:34:10 PM4/2/12
to symfo...@googlegroups.com
Lo hice así, dejando el campo tipo date en la entidad y me dice que el formato es invalido,  

FUNCIONO luego revisando la informaron que me pásate en el link!!!! :D

les explico para los que le suceda lo mismo: 

resulta que el fomato yy-mm-dd de php no significa lo mismo en javascript! y viceversa:

para una fecha 1983-09-21, el formato en la clase de php dentro de la deficion del form es yyyy-mm-dd

mientras que el formato que se le da al plugin datepicker de jquery UI es yy-mm-dd

dejo el código que funciona:

1-. en la entidad:
    /**
     * @var datetime $fecha_nacimiento
     *
     * @ORM\Column(name="fecha_nacimiento", type="date")
     * @Assert\Date(message = "formato de fecha incorrecto")
     * 
     */
    private $fecha_nacimiento;

2-. en la definición del form:

                 $builder
->add('nombre', 'text', array('required' => true))
->add('apellidos', 'text', array('required' => true))
->add('email', 'email', array('required' => true, 'label' => 'email/username'))
->add('password', 'repeated', array(
'type' => 'password',
'label' => 'Autenticación',
'first_name'        => 'Contraseña',
'second_name'       => 'repita la contraseña',
'invalid_message' => 'Las dos contraseñas deben coincidir',
'required' => true
)
)
->add('direccion', 'textarea', array('required' => true))
->add('fecha_nacimiento', 'date', array(
'attr' => array('class' => 'calendario', 'readonly' => 'readonly'),
'widget'   => 'single_text',
'format'   => 'yyyy-mm-dd',  
'required'  => true
)
;

3.- en la plantilla:

en la tabla

                <tr>
<td>
{{ form_label(formulario.fecha_nacimiento) }}
</td>
<td>
{{ form_widget(formulario.fecha_nacimiento) }}
{{ form_errors(formulario.fecha_nacimiento) }}
</td>
</tr>

un comodin <input type="hidden" id="act_year" value="{{ 'now'|date('Y') }}" />

el javascript

        actual = $('#act_year').val();
        $('form input.calendario').datepicker({
            dateFormat: 'yy-mm-dd',
            dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
            monthNames:  ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octuble','Noviembre','Diciembre'],
            monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'],
            yearRange: '1900:'+actual,
            changeYear: true,
            changeMonth: true
        });

Danny alfonzo Viana perez

unread,
Apr 2, 2012, 9:35:37 PM4/2/12
to symfo...@googlegroups.com
Ahora todo bien, pero cuando reutilizo el mismo form para la edición de usuario la fecha no sale bien, ejemplo:
en la base de datos se guardo 1983-09-21 y en el formulario de edición, el campo de fecha_nacimiento sale 1983-00-21

NO ENTIENDO PORQUE ESTAS INCONGRUENCIAS

alguno de ustedes le ha pasado esto? 

Marcos García

unread,
Apr 2, 2012, 11:09:04 PM4/2/12
to symfo...@googlegroups.com
A ver.

En la documentación pone que el formato de la fecha está definido aquí http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax.

Según eso pone que m corresponde a minutos y M a mes, quizá es eso.

Un saludo,
 
Marcos García
marc...@gmail.com



Para darte de baja, envía un email a symfony-es+...@googlegroups.com

Danny alfonzo Viana perez

unread,
Apr 2, 2012, 11:25:17 PM4/2/12
to symfo...@googlegroups.com
Perfecto! mis respetos, es así como me indicas!

el la clase del formulario quedo así:

              $builder
->add('nombre', 'text', array('required' => true))
->add('apellidos', 'text', array('required' => true))
->add('email', 'email', array('required' => true, 'label' => 'email/username'))
->add('password', 'repeated', array(
'type'  => 'password',
'label'  => 'Autenticación',
'first_name'        => 'Contraseña',
'second_name'       => 'repita la contraseña',
'invalid_message'  => 'Las dos contraseñas deben coincidir',
'required'  => true
)
)
->add('direccion', 'textarea', array('required' => true))
->add('fecha_nacimiento', 'date', array(
'attr' => array('class' => 'calendario', 'readonly' => 'readonly'),
'widget'   => 'single_text',
'format'   => 'y-MM-dd',  
'required'  => true
)
;
Reply all
Reply to author
Forward
0 new messages