Error: Call to a member function format() on string

1,220 views
Skip to first unread message

Vladimir Moran

unread,
Nov 3, 2015, 9:54:47 AM11/3/15
to symfony-es
estoy tratando de mostrar unicamente los años en un combo dentro de un formulario

...
 private $em;
 
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $dql = "SELECT DISTINCT(f.fecha) as fecha FROM AdminBundle:Documento f ORDER BY f.fecha desc";
        $results = $this->em->createQuery($dql)->getArrayResult();
        $choices = array();
        foreach ($results as $result) {
            $choices[$result['fecha']->format('Y')] = $result['fecha']->format('Y');
        }

 ->add('fecha', 'choice', array(
                    'label' => 'Años',
                    'attr' => array('style' => 'width:100px'),
                    'empty_value' => '--Todos--',
                    'required' => false,
                    'choices' => $choices
                    ))

....



Si quito ->format('Y') y lo dejo así:

   $choices[$result['fecha']] = $result['fecha']; ( me muestra las fechas (2015-11-03))

pero como necesito mostrar solo los años al agregar el formato ->format('Y') así:

  $choices[$result['fecha']->format('Y')] = $result['fecha']->format('Y');


symfony2 me genera el siguiente error:

Error: Call to a member function format() on string

pueden ayudarme a corregir ese error por favor

Manuel Aguirre

unread,
Nov 3, 2015, 10:26:58 AM11/3/15
to symfo...@googlegroups.com
Que se supone que contiene la variable $result['fecha']? porque tal como indica el error, es un string y no un objeto Datetime de php.

Si es un string, con hacer lo siguiente basta:

$year = date('Y', strtotime( $result['fecha'] ));
$choices[$year] = $year;

Saludos!

--
--
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 Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

Manuel Aguirre.


manuel_j555 | Desarrollador de Software | Optime Consulting | twitter | github | Sitio web


A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos de leer manuales.

Sebastian Thomson

unread,
Nov 3, 2015, 1:23:21 PM11/3/15
to symfony-es
Por lo que me recuerdo, cuando se usa una función SQL para capturar un dato de una columna DATE, TIME o DATETIME, doctrine no te los transforma a un objeto equivalente en PHP. Te deja lo obtiene como String.

La solución sería "construir" el objeto fecha en cada iteración del foreach que tienes en tú código. Tal y como lo siguiere Manual Aguirre.

Saludos.

Vladimir Moran

unread,
Nov 3, 2015, 2:21:11 PM11/3/15
to symfony-es
Gracias a todos por sus comentarios, lo hice tal y como indico nuestro amigo Manuel, y ha funcionado de maravilla. Saludos cordiales
Reply all
Reply to author
Forward
0 new messages