Symfony 3.4 не устанавливает аргументы при настройке в конфигурации службы yaml - PullRequest
0 голосов
/ 22 ноября 2018

Я использую Symfony 3.4 и пытаюсь перенести в него приложение Silex.Так что я не могу использовать автопроводку Symfony.

Мой service.yml выглядит как

services:
# default configuration for services in *this* file
 _defaults:
 # automatically injects dependencies in your services
  autowire: false
  # automatically registers your services as commands, event subscribers, etc.
  autoconfigure: false
  # this means you cannot fetch services directly from the container via $container->get()
  # if you need to do this, you can override this setting on individual services
  public: false

  audit.persister.base:
   class: MyBundle\Security\Audit\Persister\ChainedEntityTrailPersister
   calls:
    - method: 'addPersister'
      argument:
       - '@audit.persister_elasticsearch'

Класс скомпилированного кэша выглядит следующим образом:

$this->services['audit.persister.base'] = $instance = new \MyBundle\Security\Audit\Persister\ChainedEntityTrailPersister();

$instance->addPersister();

Я получил ошибку:

 Type error: Too few arguments to function MyBundle\Security\Audit\Persister\ChainedEntityTrailPersister::addPersister(), 0 passed in /var/www/html/api/var/cache/local/ContainerAdjsiif/getAudit_Persister_BaseService.php on line 14 and exactly 1 expected

Ошибка правильная.Потому что создатель кэшированного класса не предоставляет аргумент, который я установил в config.

Кто-нибудь знает, почему аргумент не будет установлен в сгенерированном кэше?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

В Symfony принято записывать вызовы в одну строку:

services:
    audit.persister.base:
        class: MyBundle\Security\Audit\Persister\ChainedEntityTrailPersister
        calls:
            - ['addPersister', ['@audit.persister_elasticsearch']]

Также вы можете использовать PHPStorm с плагином Symfony для автозаполнения.Благодаря этому вы спасены от опечаток, и это в основном пишет для вас:)

0 голосов
/ 22 ноября 2018

Из документации вы можете иметь:

  audit.persister.base:
     class: MyBundle\Security\Audit\Persister\ChainedEntityTrailPersister
     calls:
         - method: 'addPersister'
          arguments:
               - '@audit.persister_elasticsearch'

arguments с s в конце.

...