我是Symfony
的新手(目前使用Symfony 3.2(,我正在学习如何创建事件侦听器,以便在每个控制器之前运行我的随机函数。我的目标是通过isGranted((函数检查用户是否被记录。看看我的代码
服务.yml
> parameters:
> # parameter_name: value
>
> services:
> app.form_login_authenticator:
> class: AppBundleSecurityFormLoginAuthenticator
> arguments: ["@router", "@security.password_encoder"]
> app.init.action_listener:
> class: AppBundleEventListenerInitListener
> tags:
> - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
初始化侦听器
> <?php namespace AppBundleEventListener;
>
> use AppBundleControllerInitController; use
> SymfonyComponentHttpKernelExceptionAccessDeniedHttpException; use
> SymfonyComponentHttpKernelEventFilterControllerEvent; use
> SymfonyComponentHttpFoundationSessionSession;
>
> class InitListener {
>
> public function onKernelController(FilterControllerEvent $event)
> {
> $controller = $event->getController();
>
>
>
> //if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY'))
> //{
> // do somehting
> //}else{
> // do somehting
> //}
> if ($controller[0] instanceof InitController) {
>
> }
> if (!is_array($controller)) {
> return;
> }
>
>
> }
> }
我应该怎么做才能在 InitListener 中使用 isGranted(( 函数?
显然,你应该把security.authorization_checker
传递给你的听众。
配置中的第一个
app.init.action_listener:
class: AppBundleEventListenerInitListener
arguments: ["@security.authorization_checker"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
然后在代码中
<?php namespace AppBundleEventListener;
use AppBundleControllerInitController;
use SymfonyComponentHttpKernelExceptionAccessDeniedHttpException;
use SymfonyComponentHttpKernelEventFilterControllerEvent;
use SymfonyComponentHttpFoundationSessionSession;
use SymfonyComponentSecurityCoreAuthorizationAuthorizationCheckerInterface
class InitListener {
protected $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
// DO YOUR STUFF
}
if ($controller[0] instanceof InitController) {
}
if (!is_array($controller)) {
return;
}
}
}