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
нет ничего другого
Ответы
Ответ 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