Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 5.1 | config/services.php不工作_Php_Symfony - Fatal编程技术网

Symfony 5.1 | config/services.php不工作

Symfony 5.1 | config/services.php不工作,php,symfony,Php,Symfony,我正在实施这项计划 config/services.yaml示例工作正常,但是当使用config/services.php而不是config/services.yaml时,config/services.php中的代码不会被触发 所以这是可行的: #config/services.yaml 服务: # ... App\Util\Rot13Transformer:~ #“App\Util\Rot13Transformer”服务将在 #检测到“`App\Util\TransformerInterfa

我正在实施这项计划

config/services.yaml示例工作正常,但是当使用config/services.php而不是config/services.yaml时,config/services.php中的代码不会被触发

所以这是可行的:

#config/services.yaml
服务:
# ...
App\Util\Rot13Transformer:~
#“App\Util\Rot13Transformer”服务将在
#检测到“`App\Util\TransformerInterface``类型提示
App\Util\TransformerInterface:“@App\Util\Rot13Transformer”
但这并不是:

//config/services.php
名称空间Symfony\Component\DependencyInjection\Loader\Configurator;
使用App\Util\Rot13Transformer;
使用App\Util\TransformerInterface;
返回函数(ContainerConfiguration$configurator){
$services=$configurator->services();
$services->set(Rot13Transformer::class);
//“App\Util\Rot13Transformer”服务将在
//检测到“`App\Util\TransformerInterface``类型提示
$services->alias(TransformerInterface::class,Rot13Transformer::class);
};
这是一个错误还是我遗漏了什么


我还在config/services.php中添加了无效的php代码,没有抛出任何错误。因此,这让我得出结论,config/services.php根本没有运行。

仅从5.1开始,Symfony已经开始使用基于php的config/services.php和routes.php文件来代替yaml文件进行配置

但是,您需要删除相应的yaml文件以允许加载php文件。您可以在Kernel::configureContainer()中看到这一点

至少在我的设置中,我还发现在对services.php或routes.php进行更改之后,我必须手动运行“bin/console clear:cache”。缓存不会像yaml文件那样自动刷新。可能是我做错了什么


基于php的服务和路由生成器非常强大。它们为您提供了大量语法检查和自动完成帮助。很值得调查。文档中有yaml、xml和php的并排示例。

我发现在更改services.php或routes.php后,您总是需要清除缓存(bin/console cache:clear)。不确定这是一个功能还是一个bug。如果您仍然认为永远不会加载services.php,请查看Kernel::configureContainer并确保没有发生任何有趣的事情。最近有一些调整。当然,您必须删除config/services.yaml,因为如果它存在,那么它将代替services.php加载。至少在5.1.3中。@Cerad我正在进行缓存:清除。不过我保留了config/services.yaml,所以可能就是这样。我检查了Kernel::configureContainer,您是对的,它似乎要么加载yaml,要么加载php,而不是同时加载两者。我现在要尝试删除yaml。@Cerad我删除了services.yaml,并将默认值(请参阅)添加到services.php+接口别名中,效果非常好。感谢you@Cerad请继续并重新发布您的评论(删除yaml)作为回答,以便我可以接受。