LogoutListener дает мне «InvalidArgumentException» - PullRequest
0 голосов
/ 01 июля 2018

Я вхожу в Symfony и на самом деле я застрял на авторизации.

Я бы хотел перенаправить пользователя на определенный маршрут в зависимости от его роли. О, я использую FOS Bundle.

services.yaml:

LogoutListener:
    class: App\Listeners\LogoutListener
    arguments:
        userManager: "@fos_user.user_manager"

security.yaml:

firewalls:
    main:
        ....
        logout:
            handlers: [logoutlistener]

ListenerClass:

namespace App\Listeners;

use FOS\UserBundle\Model\UserManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
use FOS\UserBundle\Model\UserManagerInterface;

class LogoutListener implements LogoutHandlerInterface {

    protected $userManager;

    /**
     * LogoutListener constructor.
     * @param UserManagerInterface $userManager
     */
    public function __construct(UserManagerInterface $userManager){
        $this->userManager = $userManager;
    }

    public function logout(Request $request, Response $response, TokenInterface $token) {
        die('user logged out');
    }
}

Это всегда дает мне:

InvalidArgumentException
Invalid service "LogoutListener": method "App\Listeners\LogoutListener::__construct()" has no argument type-hinted as "userManager". Check your service definition.

Любой намек на меня? С уважением, Андро

1 Ответ

0 голосов
/ 05 июля 2018

Конфигурация немного изменилась с Symfony 4. Это должно сработать:

services.yaml

services:
    App\Listeners\LogoutListener:

security.yaml

firewalls:
main:
    ....
    logout:
        handlers: [App\Listeners\LogoutListener]

ListenerClass

namespace App\Listeners;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
use FOS\UserBundle\Model\UserManagerInterface;

class LogoutListener implements LogoutHandlerInterface {

protected $userManager;

public function __construct(UserManagerInterface $userManager = null)
{
    $this->userManager = $userManager;
}

public function logout(Request $Request, Response $Response, TokenInterface $Token) {

    die('user logged out');
    }
}
...