symfony3.3事件监听——日志

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为监听服务名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值