Symfony 3,DI - 为参数添加服务

时间:2015-12-03 15:13:17

标签: php symfony

我有这段代码

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档案中没有其他内容

3 个答案:

答案 0 :(得分:17)

参考yaml section中的升级指南:

  

使用@,`,|或>启动不带引号的字符串导致一个   ParseException的。

因此,请尝试修改您的配置,如下所示:

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

希望这个帮助

答案 1 :(得分:1)

第一个错误看起来像缩进,你在参数和标签中有2个缩进空格和4个缩进,请在线尝试测试yml。

第二个symfony 3现在很严格。您需要在参数服务[@repo.game]中添加引用到["@repo.game"]

答案 2 :(得分:0)

现在,带有特殊字符的值必须用单引号而不是双引号括起来。它是有效的yaml但是例如它在phpunit run for symfony

中抛出了许多异常