GetResponseEvent事件监听
监听类文件路径:AdminBundle\EventListener\RequestListener
<?php
namespace AdminBundle\EventListener;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class RequestListener
{
protected $em;
protected $container;
public function __construct(EntityManager $em,Container $container)
{
$this->em = $em;
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
// don't do anything if it's not the master request
return;
}else{
$request = $event->getRequest(); //获取request信息
$route = $request->attributes->get('_route'); //获取路由名
$route_params = $request->attributes->get('_route_params'); //获取路由参数
$user_info = unserialize($request->getSession()->get('_security_main')); //获取用户信息
$params = $request->request->all(); //获取全部参数
$method_info = $request->getMethod(); //获取请求方式
/*****此处处理自己的业务逻辑****/
}
}
}
监听fosuserbundle登录路径:AdminBundle\EventListener\LoginListener.php
<?php
namespace AdminBundle\EventListener;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class LoginListener
{
protected $userManager;
protected $container;
public function __construct(UserManagerInterface $userManager,Container $container){
$this->userManager = $userManager;
$this->container = $container;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$request = $event->getRequest(); //获取request信息
$route = $request->attributes->get('_route'); //获取路由名
$params = $request->request->all(); //获取参数
$user_info = $event->getAuthenticationToken()->getUser(); //获取用户信息
$user_roles = $event->getAuthenticationToken()->getRoles(); //获取用户角色
$role = $user_roles[0]->getRole(); //用户当前角色
/*此处处理自己的业务逻辑*/
return;
}
}
监听fosuserbundle退出路径:AdminBundle\EventListener\LogoutListener.php
注意:退出监听还需要配置路径:\app\config\security.yml 文件
<?php
namespace AdminBundle\EventListener;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DependencyInjection\Container;
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;
protected $container;
public function __construct(UserManagerInterface $userManager,Container $container){
$this->userManager = $userManager;
$this->container = $container;
}
public function logout(Request $request, Response $response, TokenInterface $token) {
$route = $request->attributes->get('_route'); //获取路由
$user_info = $token->getUser(); //获取用户信息
$params = ''; //定义参数
$user_roles = $user_info->getRoles(); //获取用户角色
$role = $user_roles[0]; //当前角色
/**此处处理自己的业务逻辑**/
return;
}
}
注意:写完监听要把此类设置为服务,退出监听还需要配置路径:\app\config\security.yml 文件
服务配置路径:AdminBundle\Resources\config\services.yml
admin.request_listener:
class: AdminBundle\EventListener\RequestListener
arguments:
- '@doctrine.orm.entity_manager' #此处为了可以在RequestListener类中使用EntityManager
- '@service_container' #此处为了可以在RequestListener类中使用Container
tags:
- { name: kernel.event_listener, event: kernel.request }
login_listener:
class: AdminBundle\EventListener\LoginListener
arguments:
- "@fos_user.user_manager"
- "@service_container"
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
logout_listener:
class: AdminBundle\EventListener\LogoutListener
arguments:
- "@fos_user.user_manager"
- "@service_container"
退出监听还要配置路径:\app\config\security.yml 文件
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout:
handlers: [logout_listener] #配置此处,logout_listener为监听服务名