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
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
Muchas gracias por tu respuesta. ¿Y con FOSUserBundle es igual? Disculpa si hago esas preguntas, es que recién estoy comenzando :D
@SakyaStelios
¡¡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
Muchas gracias maestro, duda resuelta. Es un gusto poder contar con tu ayuda.
@SakyaStelios