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

Selector de año (fecha) mediante un formulario

Estas en el tema de Selector de año (fecha) mediante un formulario en el foro de Symfony en Foros del Web. Hola. Estoy intentando crear una lista de selección que muestre los años introducidos en la base de datos cada vez que se da de alta ...
  #1 (permalink)  
Antiguo 28/07/2015, 06:03
 
Fecha de Ingreso: enero-2013
Mensajes: 14
Antigüedad: 11 años, 10 meses
Puntos: 0
Selector de año (fecha) mediante un formulario

Hola.

Estoy intentando crear una lista de selección que muestre los años introducidos en la base de datos cada vez que se da de alta un registro (digamos que sería el actual en adelante). Si pruebo con los nombres de las personas que introducen esos registros no hay ningún problema, pero en el momento que quiero que me saque las fechas me da el siguiente error.
"Catchable Fatal Error: Object of class Symfony\Component\Form\FormView could not converted to string in C:\xampp\htdocs\Misitio\app\cache\dev\classes.php line 5426"

El problema creo que viene en que no me está convirtiendo la fecha en un string..he intentado varias opciones y no hay manera..

Dejo el código del controlador:
Código PHP:
Ver original
  1. public function estadisticasAction()
  2.     {
  3.         /*Formulario de consulta de las gráficas */
  4.         $em = $this->getDoctrine()->getManager();
  5.         $prestamos = $em->getRepository('FichaBundle:Prestamos')->findAll();
  6.        
  7.             $form = $this->createFormBuilder($prestamos)
  8.                    
  9.             ->add('fechaAcceso', 'entity', array(
  10.                 'label'=>false,
  11.                 'class' => 'FichaBundle:Prestamos',
  12.                 'property' => 'fechaAcceso',
  13.                 'expanded' => false,
  14.                 'empty_value' => 'Seleccione un año',
  15.                 'query_builder' => function(EntityRepository $er) {
  16.                 return $er->createQueryBuilder('p')
  17.                         ->orderBy('p.fechaAcceso');
  18.             },))
  19.                    
  20.             ->getForm();
  21.            
  22.         return $this->render('FichaBundle:Prestamos:estadisticas.html.twig', array(
  23.             'prestamos' => $prestamos,
  24.             'form' => $form->createView(),
  25.             ));
  26.            
  27.     }

por otro lado el código de la vista:

Código HTML:
Ver original
  1. <form id="prestamos_ano" action="{{ path('prestamos_documentos_consultados') }}" method="post" {{ form_enctype(form) }}>
  2.                    
  3.                     <table width="100%">{#style="margin-left:120px"#}                                            
  4.                         <tr>
  5.                                                     {#<td class="espacio"></td>#}
  6.                                                     <td colspan="7">
  7.                                                         <table>                                
  8.                                                             <tr height="20px">
  9.                                                                 <td align="left" valign="top"><b>{{ form_label(form.fechaAcceso, 'Fecha:') }}</b></td>
  10.                                                             </tr>
  11.                                                             <tr height="20px">
  12.                                                                 <td align="left" valign="top" width="100px">{{ form_widget(form.fechaAcceso|date('Y')) }}</td>
  13.                                                             </tr>
  14.                                                             <tr height="40px"></tr>
  15.                                                         </table>
  16.                                                     </td>
  17.                                                 </tr>
  18.                                                
  19.                         <tr style="display:none">
  20.                             {{form_rest(form)}}
  21.                         </tr>                      
  22.                     </table>
  23.                 </form>

y también el de la entidad:

Código PHP:
Ver original
  1. /**
  2.      * @ORM\Column(name="fecha_acceso", type="date")
  3.      */
  4.     protected $fechaAcceso;
  5.  
  6. public function getFechaAcceso() {
  7.         return $this->fechaAcceso;
  8.     }
  9.  
  10.    
  11.    
  12.     public function setFechaAcceso()
  13. {
  14.     $this->fechaAcceso = new \DateTime();
  15.  
  16.     return $this;
  17. }


Gracias de antemano!
  #2 (permalink)  
Antiguo 28/07/2015, 08:09
 
Fecha de Ingreso: julio-2011
Ubicación: Bogotá
Mensajes: 34
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Selector de año (fecha) mediante un formulario

Creo que el error está en el twig, quita el filtro al campo del formulario.

En la línea 12

<td align="left" valign="top" width="100px">{{ form_widget(form.fechaAcceso) }}</td>
  #3 (permalink)  
Antiguo 28/07/2015, 09:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Selector de año (fecha) mediante un formulario

Es normal que tengas ese problema, Doctrine convierte el tipo de dato date a DateTime y el entity requiere de un string para representar el objeto en el select. Asi que lo mas sencillo es que quites el property de tu formulario e implementes el método __toString en tu entidad, para que devuelva la fecha formateada como tu deseas.
Código PHP:
Ver original
  1. //Entity
  2. public function __toString()
  3.     {
  4.         return $this->getFechaAcceso()->format('Y-m-d');
  5.     }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: año, fecha, formulario, mediante, selector
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 08:41.