2012-06-15 34 views
7

Oturum kapatma işleminden sonra flaş iletisinin nasıl çalıştığını öğrenmek için birkaç saat çalışıyorum.Symfony çıkış noktası işleyicisi

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); 
    } 
} 

hac iew merhaba giriş

{% 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) %} 

görünümü giriş formu

{% 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) %} 

düzeni ana şablon

<!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> 

sonra sorun o flaş mesajı yönlendirme sırasında düştü oluyor gibi görünüyor olmasıdır. Bunu gerçekleştirmenin bir yolu var mı?

Cevaplar için teşekkürler.

+0

Bize görünümü gösterir misiniz? ** invalidate_session ** kullanılması durumunda – sensorario

cevap

19

Oturum kapatıldıktan sonra yok edilir. Ancak bu davranışı, security.yml dosyanıza invalidate_session: false ekleyerek değiştirebilirsiniz.

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

Daha fazla bilgi için reference documentation'u kontrol edin.

Yine de oturumu geçersiz kılmak isterseniz, İsteğiniz üzerine doğrudan bir bayrak ayarlayabilir ve bir Kernel dinleyicisi ile kullanabilirsiniz.

+1

. Flash görünür ancak RedirectResponse gerçekleşmedi. – cavvako

+0

Symfony 2.1 sürümünü göz önünde bulundurmanızı öneriyorum - daha iyi olması için flash mesajlarını ve diğer uyumluluk molalarını yeniledi. –