Symfony - Ayuda con Lista en plantilla!!

   
Vista:

Ayuda con Lista en plantilla!!

Publicado por Leonardo (4 intervenciones) el 19/04/2017 20:02:00
Hola que tal!

Estoy haciendo una pagina, usando symfony 2.8, tengo una consulta, para esta pagina uso plantillas que se van a repetir en todas o casi todas las paginas que haya, el problema es que en esa plantilla quiero poner una lista de objetos que la tomo de la base de datos. No se como hacerle llegar esa lista! Lo único que se me ocurre es por medio de la sesión pero debería ser apenas el usuario entre en la pagina(Como todos sabemos se puede entrar gracias a los navegadores por cualquier dirección que sea valida).

Por las dudas me refiero a las plantillas que cuando entro por medio del controlador a la pagina .twig esta levanta otra por medio del extends.

Muchas gracias
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con Lista en plantilla!!

Publicado por Manuel Alejandro (2 intervenciones) el 20/04/2017 04:56:30
yo lo hago definiendo extenciones de twig, con estas se pueden definir filtros, funciones, etc
para despues utilizarlos en las plantillas twig
Para esto creas una clase php que extienda de \Twig_Extension, en donde defines las funciones que quieras utilizar,
si necesitas comunicarte con la base de datos, puedes especificar en el constructor de la extension un ObjectManager,
para despues utilizar la extension, debes registrarla como un servicio
bueno, para que entiendas mejor te sugiero que leas en el Symfony _Cookbook,
el capitulo 140 - How to Write a custom Twig Extension

entonces desde las plantilla padre donde te haga falta consultar a la base de datos para llenar la lista, puedes llamar a la funcion definida como extension, asi en los controladores que se encargan de cargar las plantillas hijas no tienes que especificar nada con respecto a la lista

Por ejemplo en un sitio, en una plantilla padre, en el nabvar queria que apareciera si el usuario
estaba logueado cuantos correos tenia actualmente

Mi Extension
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
namespace WOJBundle\Twig\Extension;
use WOJBundle\Entity\received_mail;
use Doctrine\Common\Persistence\ObjectManager;
 
class MailExtension extends \Twig_Extension
{
    private $manager;
 
    public function __construct( ObjectManager $manager ){
        $this->manager = $manager;
    }
 
    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('mail_info' , array( $this, 'MailInfo') ) ,
        );
    }
 
    public function getName(){
        return 'mail_utilities';
    }
 
    public function MailInfo( $user_id ){
        $tr = $this->manager->getRepository( 'WOJBundle:received_mail' );
        return $tr->CountUnreadMailsOfUser( $user_id );
    }
}

Asi lo registre en los servicios
1
2
3
4
5
6
services:
    woj.twig.extension.mail_utilities:
        class: WOJBundle\Twig\Extension\MailExtension
        arguments: ['@doctrine.orm.entity_manager']
        tags:
            - { name: twig.extension }

Despues en la plantilla llamo a la funcion asi
1
{% set rm = mail_info( app.user.id ) %}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con Lista en plantilla!!

Publicado por Manuel Alejandro (2 intervenciones) el 20/04/2017 05:21:37
En este libro desarrollo-agil-symfony2 tambien se habla de extensiones en varias partes, una de ellas es en:
Creando extensiones propias en Symfony2 - pag 521
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con Lista en plantilla!!

Publicado por Leonardo (4 intervenciones) el 20/04/2017 14:40:27
Muchas gracias por la respuesta! Ya lo pude solucionar pero me gusto tu consejo seguramente me va a servir para otras cosas! Te agradezco mucho tu tiempo y ayuda!!! Abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad