ログアウト時の処理を実装する

今回はよくある、ログアウト後にをリンクをクリックしたページに戻るように実装してみます。
まずsrc/Eccube/Security/Http/AuthenticationにEccubeLogoutSuccessHandlerというクラスを設置します。

<?php

namespace Eccube\Security\Http\Authentication;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;

class EccubeLogoutSuccessHandler implements LogoutSuccessHandlerInterface
{

    public function onLogoutSuccess(\Symfony\Component\HttpFoundation\Request $request)
    {
        $referer = $request->headers->get('referer');

        return new RedirectResponse($referer);
    }
}

app/config/eccube/services.yamlに追加

eccube.security.logout_success_handlerという名前でサービス登録しておきます。

 eccube.security.logout_success_handler:
  class: Eccube\Security\Http\Authentication\EccubeLogoutSuccessHandler

app/config/eccube/packages/security.yamlに追加

customer:
    pattern: ^/
    anonymous: true
    provider: customer_provider
    remember_me:
        secret: '%kernel.secret%'
        lifetime: 3600
        name: eccube_remember_me
        remember_me_parameter: 'login_memory'
    form_login:
        check_path: mypage_login
        login_path: mypage_login
        csrf_token_generator: security.csrf.token_manager
        default_target_path: homepage
        username_parameter: 'login_email'
        password_parameter: 'login_pass'
        use_forward: true
        success_handler: eccube.security.success_handler
        failure_handler: eccube.security.failure_handler
    logout:
        path: logout
        target: homepage
        success_handler: eccube.security.logout_success_handler

security→firewalls→customer→logoutに、success_handler: eccube.security.logout_success_handlerを記載します。

ここまで実装を行うと、ログアウト時にEccubeLogoutSuccessHandler::onLogoutSuccessが実行され、元のページへリダイレクトされるようになります。