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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |