Symfony 2.8升级至3.0.9时YAML文件@符号引发的语法错误解决问询
解决Symfony 3.0升级中YAML文件@标识符的语法错误
你遇到的问题是Symfony 3.0版本对YAML语法校验更严格导致的,核心原因是服务引用的@符号没有正确用引号包裹,触发了YAML解析器的保留标识符校验规则。
问题根源
Symfony 3.0使用的Yaml组件相比2.8版本,对@这类保留标识符的处理更严谨:当@作为普通标量的开头时,必须用引号包裹,否则会被判定为无效语法。你报错的services.yml第5行里,@templating和@service_container这两个服务引用没有加引号,而其他服务(比如'@doctrine.orm.entity_manager')是正确加了引号的,这种不一致就导致了解析失败。
修复步骤
- 打开报错的目标文件:
src/H360/ResTableBundle/Resources/config/services.yml - 找到第5行的
arguments数组,把未加引号的@templating和@service_container用单引号或双引号包裹:
修改前:
arguments: [%printerserver_port%,%enviroment%,'@doctrine.orm.entity_manager','@request_stack','@reservas.reservas','@general.parametros','@general.establecimientos','@pos.tpv','@swiftmailer.mailer.tablereservation', @templating, @service_container]
修改后:
arguments: [%printerserver_port%,%enviroment%,'@doctrine.orm.entity_manager','@request_stack','@reservas.reservas','@general.parametros','@general.establecimientos','@pos.tpv','@swiftmailer.mailer.tablereservation', '@templating', '@service_container']
- 保存文件后,重新执行
php bin/console assets:install或php bin/console cache:clear命令,应该就能正常运行了。
额外建议
为了避免后续出现类似问题,建议统一给所有服务引用的@符号加上引号,这也是Symfony 3.x及以上版本的推荐写法——既让YAML语法更规范,也能减少解析器的歧义。
内容的提问来源于stack exchange,提问作者Erik Viera Olivares
相关产品推荐
相关产品推荐

