Использование пользовательской службы ведения журнала в классе AuthenticationHandler в Symfony2

Короче говоря, я пытаюсь использовать службу ведения журнала, которую я определил в пользовательской службе обработчика.

Мой config.yml

services:
authentication_handler:
    class: Panasonic\LoginBundle\Handler\AuthenticationHandler
    arguments: [ @custom_logger ]

custom_logger:
    class: Monolog\Logger
    arguments: [login]
    calls:
        - [ pushHandler, [ @custom_logger_stream ]]

custom_logger_stream:
    class: Monolog\Handler\RotatingFileHandler
    arguments: [ %kernel.logs_dir%/test.log, 30, 200 ]

«Сервисы:» в моем коде имеют хороший отступ, не беспокойтесь.

Мой пакет/обработчик/обработчик аутентификации

namespace Panasonic\LoginBundle\Handler;

use Monolog\Logger;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class AuthenticationHandler implements AuthenticationSuccessHandlerInterface
{

private $custom_logger;

public function __constructor(Logger $custom_logger)
{
    $this->custom_logger = $custom_logger;
}

public function onAuthenticationSuccess(Request $request,
                                        TokenInterface $token)
{
    $log = $this->custom_logger;

    $log->addWarning('Foo');
    $log->addError('Bar');
    die;

    //        var_dump($token); die;
    //        var_dump($request->getSession()); die;
}
}

Я осознаю:

Fatal error: Call to a member function addWarning() on a non-object in ... Panasonic\LoginBundle\Handler\AuthenticationHandler.php on line 22

Примечание. Я знаю, что должен вернуть ответ в onAuthenticationSuccess, на самом деле он неполный, но я знаю, что он работает, я получил результаты из var_dumps.

Я предполагаю, что инъекция не подходит, как это сделать? Я не могу понять, что здесь делать. Пожалуйста, помогите

ссылки, которые я проверил: Доступ к службам внутри обычного класса

http://martinsikora.com/symfony2-and-dependency-injection


person Rishi    schedule 16.04.2012    source источник
comment
Я думаю, что ошибка в custom_logger: class: Monolog\LoggerSymfony\Bridge\Monolog\Logger и должен был использовать LoggerInterface в моем обработчике. Я решил свою проблему со ссылкой, которую дал PéCé, повторно адаптировав свой код.   -  person Rishi    schedule 17.04.2012


Ответы (1)


Проверьте имя своего конструктора... Думаю, оно не называется...

public function __construct()
{
    // ...
}

Я написал статью, подробно объясняющую, как этого добиться: http://blog.alterphp.com/2012/04/set-up-specific-log-file-for.html

person AlterPHP    schedule 16.04.2012
comment
Спасибо, ваша запись в блоге помогла мне найти мои ошибки. Хороший пример с чистым кодом. - person Rishi; 17.04.2012