Symfony2缓存:清除输出services.yml文件的内容

Symfony2缓存:清除输出services.yml文件的内容,symfony,doctrine-orm,Symfony,Doctrine Orm,在Symfony2中,每次我通过控制台清除缓存时: php app/console cache:clear 控制台打印出my services.yml文件的内容!如果我通过rm-rf app/cache/*手动删除缓存(我必须这样做,因为我的控制台用户由于某种原因无法访问apache用户www数据,尽管由于文件创建为640而不是660,所以我在同一组中),然后,公共网站也会在第一次加载页面并生成缓存时将其打印出来 注意:即使在app/config/config.yml中没有加载services

在Symfony2中,每次我通过控制台清除缓存时:

php app/console cache:clear
控制台打印出my services.yml文件的内容!如果我通过
rm-rf app/cache/*
手动删除缓存(我必须这样做,因为我的控制台用户由于某种原因无法访问apache用户www数据,尽管由于文件创建为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" }
# /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 ]
然后在services.yml文件中设置全局服务:

# /app/config/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: "@AcmeBundle/Resources/config/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 ]

问:你知道为什么每次我清除缓存时都会打印出这个文件吗?这是因为将
/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的新手,请注意转换服务配置文件的格式需要的不仅仅是更改文件名。

好吧,我的第一个猜测是,有一天您在代码中加入了这一点,但忘记了:)您是否尝试过删除供应商并再次安装?很好的猜测,但是没有。这只在services.yml文件中。它仅在清除缓存后第一次出现。如果我更改services.yml文件中的文本,这就是打印出来的内容。这肯定是这个文件。我也知道服务正在加载,我访问其中一个全球。所以services.yml文件配置正确…我的意思是您可能输入的代码正在读取此文件并将其打印出来。它可以放在加载服务配置的类中(因为在第一次使用之后,它会被缓存,并且在清除缓存之前不再使用)。你有没有尝试删除供应商并重新安装它们?这确实很奇怪。找到原因的最好方法是使用Debugger(XDebug)并一步一步地检查代码。这样你就能很快找到它。