在Symfony2中,每次我通过控制台清除缓存:
php app/console cache:clear
控制台打印出services.yml文件的内容!如果我通过rm -rf app/cache/*
手动删除缓存(我必须这样做,因为我的控制台用户无法访问apache用户www-data,出于某种原因,尽管因为文件属于同一组创建为640而不是660),然后公共网站也会在第一次加载页面并生成缓存时将其打印出来。
注意:即使在app / config / config.yml中没有加载services.yml,也会打印出来(只是现有的,不知何故被引用)
我们导入services.yml文件:
# /app/config/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: "@AcmeBundle/Resources/config/services.yml" }
然后在services.yml文件中设置全局服务:
# /src/Acme/Bundle/Resources/config/services.yml
# TODO: ALERT! this prints out whenever I clear the cache...
services:
#This is a service so that we can access the view object anywhere
acme.view:
class: Acme\Bundle\Controller\ViewController
arguments: [ @doctrine.orm.entity_manager ]
答案 0 :(得分:0)
这是因为将/Acme/Bundle/Resources/config/services.yml
服务参数从PHP更改为YAML格式(我在测试中最初创建为PHP)。
对服务参数文件的引用在两个地方的/Acme/Bundle/DependencyInjection/AcmeBundleExtension.php
中进行了硬编码。
这是破碎的代码:
class AcmeBundleExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
由于services.yml作为PHP文件加载,因此只要重新创建缓存,它就会打印出文本。令人惊讶的是,所有服务仍以某种方式实际加载......!
请注意,如果您将配置文件从PHP更改为YAML(反之亦然),则必须更新:
$loader->load('services.yml');
(我做过)
但您还必须将加载程序功能从Loader\PhpFileLoader
更新为Loader\YamlFileLoader
:
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
当然这似乎很明显,但如果您是Symfony的新手,请注意转换服务配置文件的格式不仅需要更改文件名。