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

[SOLUCIONADO] Symfony2 - Rellenar lista desde entidad en plantilla base...

Estas en el tema de Symfony2 - Rellenar lista desde entidad en plantilla base... en el foro de Symfony en Foros del Web. Que tal compañeros, vengo a ustedes porque tengo un problema con symfony 2, verán, tengo poco de comenzar con el fw, y hasta ahora me ...
  #1 (permalink)  
Antiguo 08/06/2013, 16:09
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Symfony2 - Rellenar lista desde entidad en plantilla base...

Que tal compañeros, vengo a ustedes porque tengo un problema con symfony 2, verán, tengo poco de comenzar con el fw, y hasta ahora me las apaño bien leyendo por aquí y por allá, pero, ahora tengo un problema que no eh podido encontrar "solución"...

Lo que busco es rellenar una lista desordenada (ul/li) desde una entidad, PERO, que va a ser visible desde todo el front-end, vamos, en todos los controladores/acciones, por lo tanto me es ilógico tener que llamar a la entidad en cada acción, por lo tanto busco un método en el cual la plantilla sea la que tenga acceso a la entidad, eh estado leyendo sobre servicios y extensiones de twig, pero, no estoy seguro de si es lo que necesito y como implementarlo...

Servicios:

Eh creado un servicio (hasta donde comprendí) que llama a la entidad y obtiene los items necesarios, y lo eh registrado como variable global para twig, pero, no logro que funcione, al llamar a la variable y al método en cuestión el fw o twig deja de funcionar (sin enviar algún mensaje de error), simplemente ya no imprime ninguna linea después de donde hago la llamada (a la variable global y su método), básicamente ses como si colocara un die() o exit(), dejo lo que eh hecho...

Código YAML:
Ver original
  1. #rofana\ProfanaBundle\Resources\config\services.yml
  2. services:
  3.     appseries:
  4.         class: Profana\ProfanaBundle\Extensions\AppSeries
  5.         arguments: [@doctrine.orm.entity_manager]

Código YAML:
Ver original
  1. #app\config\config.yml
  2. twig:
  3.     debug:           %kernel.debug%
  4.     strict_variables: %kernel.debug%
  5.     globals:
  6.         appseries: @appseries

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Profana\ProfanaBundle\Extensions;
  4.  
  5. use Doctrine\ORM\EntityManager;
  6.  
  7. use Profana\ProfanaBundle\Entity\Serie;
  8.  
  9. class AppSeries
  10. {
  11.     protected $em;
  12.  
  13.     function __construct(EntityManager $em) {
  14.         $this->em = $em;
  15.     }
  16.  
  17.     public function getLastfive() {
  18.         $entity = $em->getRepository('ProfanaBundle:serie');
  19.         $series = $entity->createQuery('SELECT p FROM ProfanaBundle:Serie p ORDER BY p.id DESC')
  20.                      ->setMaxResults(5);
  21.  
  22.         return  $series->getResult();
  23.     }
  24. }

Código TWIG:
Ver original
  1. <ul>
  2.                 <li class="web-base-submenu-header">Ultimas series agregadas</li>
  3.                 {% for lastseries in appseries.getLastfive() %}
  4.                 <li><a href="$">{{ lastseries.serie }}</a></li>
  5.                 {% else %}
  6.                 <li>No hay series aún!</li>
  7.                 {% endfor %}
  8.             </ul>
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 08/06/2013 a las 16:29
  #2 (permalink)  
Antiguo 08/06/2013, 16:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Symfony2 - Rellenar lista desde entidad en plantilla base...

En tu lugar utilizaría una funcion(twig function) o bien render directamente en vez de una variable global, de todas formas comprueba el código, porque, primero, EntityManager::getRepository retorna el repositorio y no una entidad(de paso, el DQL debería estar dentro del repository de la entidad relacionada) y segundo estas retornando el QueryBuilder y no el resultado del mismo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 08/06/2013 a las 16:49
  #3 (permalink)  
Antiguo 08/06/2013, 18:17
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: Symfony2 - Rellenar lista desde entidad en plantilla base...

Antes que nada gracias por contestar @masterpuppet!!!

En fin, después de ir a darme un baño y comer algo me di cuenta que estuve cometiendo un error tremendamente básico (tonto), probablemente por no dormir, en fin, tienes razón en lo que dices sobre que getRepository() retorna el repositorio, no la entidad, y que el DQL debe ir en el repository de la entidad, cosa que ya tengo hecho, pero por estar probando cosas modifique de muchas maneras el método buscando el error, pero solo cometía mas, en fin, que regresando a mi área de trabajo me di cuenta que eh estado llamando a $em y no a $this->em, por lo cual obviamente no contraría dicha variable, ahora ya puedo llamar al repository de la entidad donde ya tenia definidas los métodos que me retornan los datos necesarios, ya ahora ya funciona como debería ser, solo que ahora me da curiosidad que no arrojará error por intentar llamar a una variable no definida, peor aún, llamar a un método de dicha variable y no arrojar un mensaje de error (obviamente tengo los mensajes de error activados =/)...

Por ultimo, buscaré información sobre generar funciones para twig, podrías indicarme que diferencia hay entre esta forma y la de generar una función de twig, es mas complicado? sencillo?, o si es simplemente lo recomendado en estos casos?...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 08/06/2013, 19:09
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Symfony2 - Rellenar lista desde entidad en plantilla base...

Estas seguro que el error no esta "escondido" a simple vista ?(compruébalo con firebug ;)), sobre si es mas complicado o no, es prácticamente lo mismo, es mas un tema de preferencias que otra cosa, pero para lo que describes se suelen utilizar las funciones que no son mas que view helpers o bien renderear el controller directamente(este se suele utilizar cuando tienes un listado y a su vez un widget del mismo listado con x cantidad de items)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 08/06/2013, 19:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: Symfony2 - Rellenar lista desde entidad en plantilla base...

Tan seguro que es la razón por la que eh tardado tanto en ver el problema real, claro que uso firebug (de hecho, firefox+firebug es mi base de desarrollo), y aún así eh vuelto a recrear el error y no encuentro mensajes de dicho error por ningún lado, simplemente la aplicación se detiene, ni en chrome, firefox, opera, safari se muestra error alguno. ni en sus herramientas de depuración como firebug y similares en los otros navegadores, también busque en los logs de php, pero esto ya se ve que es mas un tema de instalación/configuración ya que php no genera el log, en fin, agradezco tu interés @masterpuppet, ahora podré descansar un rato ajaja y continuar mas tarde...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: entidad, lista, plantilla, rellenar, symfony2
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 13:37.