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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
InvalidArgumentException: The service definition "logger" does not exist.
Mon code :
// Acme/SecurityBundle/Resources/config/security_factories.yml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.