加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何编写用户名登录Symfony2

发布时间:2020-12-13 21:52:45 所属栏目:PHP教程 来源:网络整理
导读:我想将像extra field这样的用户名写入生产日志. 我该怎么做? 我在config.yml中有这个配置: services: monolog.formatter.logprocessor: class: MonologFormatterLineFormatter arguments: - "[%%datetime%%] [%%username%%] %%channel%%.%%level_name%%:
我想将像extra field这样的用户名写入生产日志.
我该怎么做?

我在config.yml中有这个配置:

services:
    monolog.formatter.logprocessor:
        class: MonologFormatterLineFormatter
        arguments:
            - "[%%datetime%%] [%%username%%] %%channel%%.%%level_name%%: %%message%%n"

monolog.processor.logprocessor:
    class: AcmeCoreBundleMonologLogProcessor
    tags:
        - { name: monolog.processor,method: processRecord }
monolog:
    handlers:
        main:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            level: warning
            formatter: monolog.formatter.logprocessor

当我尝试将security.context注入LogProcessor时,我收到错误:

[SymfonyComponentDependencyInjectionExceptionServiceCircularReferenceException]         
Circular reference detected for service "monolog.processor.logprocessor",path: "router ->  
monolog.logger.router -> monolog.processor.logprocessor -> security.context -> security.a  
uthorization_checker -> security.authentication.manager -> security.user.provider.concrete  
.chain_provider -> security.user.provider.concrete.main ->  doctrine.orm.default_entity_manager -> doctrine.dbal.default_connection -> monolog.logger.doctrine".

解决方法

这是配置

# Service Configuration
services:          
    monolog.formatter.html:
        class: MonologFormatterHtmlFormatter

    monolog.processor.web_processor:
        class: MonologProcessorWebProcessor
        tags:
            - { name: monolog.processor,method: __invoke } 

    monolog.processor.user:
        class: CompanyToolBoxBundleServicesMonologExtraProcessor
        arguments:  ["@security.token_storage"]
        tags:
            - { name: monolog.processor }
            - { name: kernel.event_listener,event: kernel.request,method: onKernelRequest }

和服务代码
????

namespace CompanyToolBoxBundleServicesMonolog;

use SymfonyComponentHttpKernelEventGetResponseEvent;
use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;

class ExtraProcessor
{
    private $tokenStorage = null;
    private $user = null;
    private $postParams = null;    

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function __invoke(array $record)
    {
        if (null !== $this->user) {
            $record['extra']['user'] = $this->user->getUserDetails();
        }

        if (null !== $this->postParams) {
            $record['extra']['postParams'] = $this->postParams;
        }

        return $record;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $postParams = $event->getRequest()->request->all();
        if(false === empty($postParams)){
            $this->postParams = serialize($postParams);
        }  

        if (null === $token = $this->tokenStorage->getToken()) {
            return;
        }

        if (!is_object($user = $token->getUser())) {
            // e.g. anonymous authentication
            return;
        }

        $this->user = $user;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读