[DIC] Injecter le logger dans une factory
Bonjour,
J'essaie de mettre en place un "authentication manager" avec pas mal de difficultés.
Pour voir comment les choses se déroulent, j'alimente des logs dans les différentes procédures. J'injecte le logger comme un service (comme dans le chapitre 16 du book)
Autant pour les Providers, token, listener... ça se passe bien, autant lorsque j'essaie dans la SecurityFactory, ça se passe mal : j'ai le message suivant :
Code:
1 2
|
InvalidArgumentException: The service definition "logger" does not exist. |
Mon code :
// Acme/SecurityBundle/Resources/config/security_factories.yml
Code:
1 2 3 4 5 6 7
|
services:
security.authentication.factory.accessmaster:
class: Acme\SecurityBundle\DependencyInjection\Security\Factory\AccessMasterFactory
arguments: [@logger]
tags:
- { name: security.listener.factory } |
Ma factory
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
<?php
// src/Acme/SecurityBundle/DependencyInjection/Security/Factory/AccessMasterFactory.php
namespace Acme\SecurityBundle\DependencyInjection\Security\Factory;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\DefinitionDecorator;
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\SecurityFactoryInterface;
class AccessMasterFactory implements SecurityFactoryInterface
{
protected $logger;
public function __construct ($logger)
{
$this->logger = $logger;
}
public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint)
{
$providerId = 'security.authentication.provider.accessmaster.'.$id;
$container->setDefinition($providerId, new DefinitionDecorator('accessmaster.security.authentication.provider'))
->replaceArgument(0, new Reference($userProvider));
$listenerId = 'security.firewall.listener.accessmaster.'.$id;
$listener = $container->setDefinition($listenerId, new
DefinitionDecorator('accessmaster.security.firewall.listener'));
return array($providerId, $listenerId, $defaultEntryPoint);
}
//... |
Peut-on logger proprement ce qui se passe dans la "securityFactory" ?
Merci pour votre aide.