Проблемы с внедрением пользовательского сервиса в пользовательский провайдер с Symfony2 - PullRequest
0 голосов
/ 04 мая 2018

У меня проблемы с вызовом моего ImageEncoderService внутри моего LdapUserProvider.php с Symfony2. В Интернете я нахожу дискуссии только о том, как вызывать сервисы внутри репозиториев, контроллеров, сущностей и команд.

Делаем это:

class LdapUserProvider implements UserProviderInterface
{
    private $ldapManager;
    private $bindUsernameBefore;
    private $userClass;
    private $em;
    private $session;
    private $imgEncoder;

    public function __construct(LdapManagerUserInterface $ldapManager, $bindUsernameBefore = false, $userClass, $em, ImageEncoderService $imgEnconder)
    {
        $this->session = new Session();
        $this->ldapManager = $ldapManager;
        $this->bindUsernameBefore = $bindUsernameBefore;
        $this->userClass = $userClass;
        $this->em = $em;
        $this->imgEnconder = $imgEnconder;
    }
    ...
}

Сгенерировать эту ошибку:

ContextErrorException in LdapUserProvider.php line 58:
Catchable Fatal Error: Argument 5 passed to
Foo\ApiBundle\Provider\LdapUserProvider::__construct() 
must be an instance of Foo\ApiBundle\Service\ImageEncoderService,
none given, called in /app/cache/dev/appDevDebugProjectContainer.php 
on line 2202 and defined

Можно ли даже внедрить услугу в обычного провайдера? Или мне нужно ввести его куда-нибудь еще, а затем использовать внутри провайдера?

Я использую провайдера LDAP: https://symfony.com/doc/current/security/ldap.html

PS. Сам сервис отлично работает в других местах приложения, таких как команды, контроллеры и т. Д.

1 Ответ

0 голосов
/ 05 мая 2018

Вы уверены, что имеете в своем классе оператор использования этого API?

use  Foo\ApiBundle\Service\ImageEncoderService;

Попробуйте удалить каталог кеша.

Вы можете попробовать ввести напрямую через сервис services.yml.

Документация Symfony для явного добавления других сервисов и параметров.

https://symfony.com/doc/current/service_container.html#manually-wiring-arguments

Пример:

     # explicitly configure the service
        #dont remember if you need to register the service like this
        #but should work without this, refer documentation :)
        # ImageService:
        #   class:  Foo\ApiBundle\Provider\LdapUserProvider

        Foo\ApiBundle\Provider\LdapUserProvider:
            arguments:
                $imgEncoder: '@Foo\ApiBundle\Service\ImageEncoderService'
                #$imgEncoder: '@ImageService'
...