Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Mostrar plantillas diferentes de acuerdo al usuario

27 de mayo de 2014

Hola a todos, quisiera saber cómo es que puedo mostrar diferentes entornos al usuario dependiendo si es un usuario anónimo o está auntenticado. No se si esto se hace en el controlador, o en las plantillas.

Agradezco infinitamente su ayuda


Respuestas

#1

La mejor forma de hacer lo que comentas es posiblemente añadir la lógica directamente en las plantillas en vez de en los controladores.

1. Para incluir una plantilla diferente en función del usuario:

{{ include (app.user
    ? 'AcmeDemoBundle:Default:usuario_conectado.html.twig'
    : 'AcmeDemoBundle:Default:usuario_anonimo.html.twig'
) }}

2. Si quieres cambiar completamente el diseño de la página, mejor cambiar la herencia de plantillas:

{% extends (app.user
    ? '::layout_usuario_conectado.html.twig'
    : '::layout_usuario_anonimo.html.twig'
) %}

@javiereguiluz

27 mayo 2014, 8:51
#2

Muchas gracias por tu respuesta. ¿Y con FOSUserBundle es igual? Disculpa si hago esas preguntas, es que recién estoy comenzando :D

@SakyaStelios

27 mayo 2014, 17:25
#3

¡¡No te disculpes por preguntar!! ¿Para qué sirve un foro si no es para preguntar lo que no sabes?

Me temo que no he usado mucho el bundle FOSUserBundle, pero leyendo su documentación sobre cómo adaptar su layout para integrarlo mejor en tu aplicación, puedes ver el siguiente código:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
    </head>
    <body>
        <div>
            {% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
                {{ 'layout.logged_in_as'|trans({
                       '%username%': app.user.username}, 'FOSUserBundle'
                ) }} |
                <a href="{{ path('fos_user_security_logout') }}">
                    {{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
                </a>
            {% else %}
                <a href="{{ path('fos_user_security_login') }}">
                    {{ 'layout.login'|trans({}, 'FOSUserBundle') }}
                </a>
            {% endif %}
        </div>
 
        {% for type, messages in app.session.flashbag.all() %}
            {% for key, message in messages %}
                <div class="flash-{{ type }}">
                    {{ message|trans({}, 'FOSUserBundle') }}
                </div>
            {% endfor %}
        {% endfor %}
 
        <div>
            {% block fos_user_content %}
            {% endblock fos_user_content %}
        </div>
    </body>
</html>

Observa que utilizan app.user.username para obtener el nombre de usuario, por lo que no hay ningún cambio en lo que respecta al uso de app.user para obtener la información sobre el usuario conectado en la aplicación.

@javiereguiluz

27 mayo 2014, 18:07
#4

Muchas gracias maestro, duda resuelta. Es un gusto poder contar con tu ayuda.

@SakyaStelios

27 mayo 2014, 19:26