Подтвердить что ты не робот

Symfony 3, DI - добавление сервиса в аргумент

У меня есть этот код

services:
  repo.game:
    class: Doctrine\ORM\EntityRepository
    factory_service: doctrine.orm.default_entity_manager
    factory_method: getRepository
    arguments:
        - AppBundle\Entity\Game

  file.upload.listener:
    class: AppBundle\Listener\FileUploadListener
    arguments: [@repo.game]
    tags:
        - { name: "kernel.event_listener", event: "oneup_uploader.post_upload", method: "onUpload" }

Это отлично работало в <= 2.8, но здесь, в 3.0, я получил это сообщение об ошибке

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] The file "/ext/thing/app/config/services.yml" does not contain valid YAML.

[Symfony\Component\Yaml\Exception\ParseException] The reserved indicator "@" cannot start a plain scalar; you need to quote the scalar at line 14 (near "arguments: [@repo.game]").

В моем файле /ext/thing/app/config/services.yml нет ничего другого

4b9b3361

Ответ 1

Ссылаясь на руководство UPGRADE в разделе yaml:

Запуск строки без кавычек с помощью @, `,\или > приводит к ParseException.

Итак, попробуйте изменить конфигурацию следующим образом:

 file.upload.listener:
    class: AppBundle\Listener\FileUploadListener
    arguments: ["@repo.game"]
    tags:
        - { name: "kernel.event_listener", event: "oneup_uploader.post_upload", method: "onUpload" }

Надеемся на эту помощь

Ответ 2

Первая ошибка выглядит как отступ, у вас есть 2 отступов и 4 отступа в аргументе и тегах, попробуйте проверить yml онлайн.

Второй symfony 3 теперь строгий. вам нужно добавить цитату в службу аргументов [@repo.game] в ["@repo.game"]

Ответ 3

Теперь значение со специальными символами должно быть обернуто одинарными кавычками вместо double. Это действительно yaml, но, например, он бросает множество исключений в phpunit для symfony