2012-06-15 12 views
7

Solo estoy tratando de encontrar un par de horas para ver cómo funciona el mensaje flash después de la acción de cierre de sesión.Operador de cierre de sesión de Symfony

security.yml

login: 
     pattern: ^/login$ 
     security: false 

    secured_area: 
     pattern: ^/ 
     form_login: 
      check_path: /check 
      login_path: /login 
      failure_handler: authentication_handler 
     logout: 
      path: /logout 
      success_handler: authentication_handler 

config.yml

services: 
    authentication_handler: 
     class: Project\LoginBundle\Handler\AuthenticationHandler 

AuthenticationHandler.php

class AuthenticationHandler implements AuthenticationFailureHandlerInterface, LogoutSuccessHandlerInterface 
{ 
    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    {  
     $referer = $request->headers->get('referer');  
     $request->getSession()->setFlash('error', $exception->getMessage()); 

     return new RedirectResponse($referer); 
    } 

    public function onLogoutSuccess(Request $request) 
    { 
     $referer = $request->headers->get('referer'); 
     $request->getSession()->setFlash('success', 'Wylogowano'); 


     return new RedirectResponse($referer); 
    } 
} 

v IEW hola después de Entrar

{% extends "ProjectCMSBundle:Secured:layout.html.twig" %} 

{% block title "Hello " ~ name %} 

{% block content %} 
    <h1>Hello {{ name }}!</h1> 

    <a href="{{ path('_project_secured_hello_admin', { 'name': name }) }}">Hello resource secured for <strong>admin</strong> only.</a> 
{% endblock %} 

{% set code = code(_self) %} 

vista de formulario de inicio de sesión

{% extends 'ProjectCMSBundle::layout.html.twig' %} 

{% block title %} 
    Title 
{% endblock %} 

{% block content %} 


    <form action="{{ path("_project_security_check") }}" method="post" id="login"> 
     <div class="data"> 
      <div class="username"> 
       <label for="username">&nbsp;</label> 
       <input type="text" id="username" name="_username" value="{{ last_username }}" /> 
      </div> 

      <div class="password"> 
       <label for="password">&nbsp;</label> 
       <input type="password" id="password" name="_password" /> 
      </div> 
     </div> 
    {% if error %} 
     <div class="error">{{ error.message|trans({},'messages') }}</div> 
    {% endif %} 
    <input type="submit" class="submit" /> 
</form> 
{% endblock %} 

{% set code = code(_self) %} 

composición de la plantilla principal

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" href="{{ asset('bundles/project/css/demo.css') }}" type="text/css" media="all" /> 
    <title>{% block title %}{% endblock %}</title> 
    <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" /> 
</head> 
<body> 
    <div id="symfony-wrapper"> 

     {% if app.session.flash('error') %} 
      <div class="flash-message"> 
       {{ app.session.flash('error')|trans }} 
      </div> 
     {% endif %} 

     {% if app.session.flash('success') %} 
      <div class="flash-message"> 
       {{ app.session.flash('success')}} 
      </div> 
     {% endif %} 

     {% if app.user %} 
      {% block content_header %} 
      <ul id="menu"> 
       {% block content_header_more %} 
       {% endblock %} 
      </ul> 

      <div style="clear: both"></div> 
      {% endblock %} 
     {% endif %} 

     <div class="symfony-content"> 
      {% block content %} 
      {% endblock %} 
     </div> 

     {#{% if code is defined %} 
      <h2>Code behind this page</h2> 
      <div class="symfony-content">{{ code|raw }}</div> 
     {% endif %}#} 
    </div> 
</body> 

El problema es que parece que el mensaje flash es conseguir que deje durante redirección. ¿Hay alguna manera de lograr esto?

Gracias por las respuestas.

+0

¿Puede mostrarnos la vista? – sensorario

Respuesta

19

La sesión se destruye al cerrar la sesión. Pero puede cambiar este comportamiento agregando invalidate_session: false en su archivo security.yml.

logout: 
    path: /logout 
    success_handler: authentication_handler 
    invalidate_session: false 

Compruebe el reference documentation para obtener más información.

Si aún desea invalidar la sesión, puede establecer un indicador en su Solicitud directamente y usarlo con un escucha de Kernel.

+1

en caso de utilizar ** invalidate_session ** Aparece el mensaje flash pero no se produjo la respuesta de redireccionamiento. – cavvako

+0

Sugiero considerar la versión de Symfony 2.1: ha mejorado los mensajes flash y otros cortes de compatibilidad para mejor. –

Cuestiones relacionadas