【问题标题】:Symfony is suddenly failing with "The service "session.storage.metadata_bag" has a dependency on a non-existent parameter"Symfony 突然因“服务“session.storage.metadata_bag”依赖于不存在的参数而失败”
【发布时间】:2016-12-08 20:46:00
【问题描述】:

我昨天早上从 Symfony 3.1.5 升级到 3.2.0,直到一个小时左右之前一切都很好。

现在 Symfony 在任何类型的访问(包括控制台命令)上都会抛出以下异常:

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
服务“session.storage.metadata_bag”依赖于 不存在的参数“session.metadata.storage_key”。

我尝试了以下方法:

  • 退出了我最近的更改
  • 已删除 var/cache/*

这是异常跟踪:

Exception trace:
 () at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:100
 Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->get() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php:56
 Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag->get() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:217
 Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->resolveString() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:187
 Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->resolveValue() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:177
 Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->resolveValue() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php:39
 Symfony\Component\DependencyInjection\Compiler\ResolveParameterPlaceHoldersPass->process() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Compiler/Compiler.php:120
 Symfony\Component\DependencyInjection\Compiler\Compiler->compile() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ContainerBuilder.php:565
 Symfony\Component\DependencyInjection\ContainerBuilder->compile() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:484
 Symfony\Component\HttpKernel\Kernel->initializeContainer() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:116
 Symfony\Component\HttpKernel\Kernel->boot() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:68
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Volumes/Data01/Projects/Beck/WWUI/site/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:122
 Symfony\Component\Console\Application->run() at /Volumes/Data01/Projects/Beck/WWUI/site/bin/console:29

如您所见,它是 Symfony 的一部分,而不是我的代码。

我很茫然。
有人看过这个吗?
有什么建议吗?

编辑 1:
根据 Dagon 的建议,我检查 session.xml,并看到它看起来正确,我决定替换

<argument>%session.metadata.storage_key%</argument>

标记

<argument>_sf2_meta</argument>

在 session.xml 中。这导致了一个新的类似错误:

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
服务 “64e3c91c625381e3c2c0184cf9ea0c6d5353986d77aa111949ca6fb8b17a8f07_2” 依赖于不存在的参数“validator.mapping。
缓存.前缀”。

【问题讨论】:

  • 检查 session.xml
  • 已检查供应商/...symfony/...config/session.xml。我看到 session.metadata.storage_key 参数设置为“_sf2_meta”,并且在 session.storage.metadata_bag 服务定义中使用了该密钥。对于为什么 Symfony 报告该参数不存在感到困惑。如果有帮助,可以发布 session.xml 文件。

标签: php symfony


【解决方案1】:

这本身并不是一个真正的答案,而是一个修复。
我将供应商重命名为 vendor-HOLD,然后运行 ​​composer install。问题消失了。

我对新旧session.xml文件做了一个diff,发现参数的定义不一样。导致错误的版本包含:

<parameter string="session.metadata.storage_key">_sf2_meta</parameter>

新安装的版本包含:

<parameter key="session.metadata.storage_key">_sf2_meta</parameter>

相反。显然,根据我对 session.xml 所做的实验性编辑,其他文件也不正确。不知道发生了什么,但是 composer install 修复它很好。哦,是的,后来我删除了 vendor-HOLD。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2022-07-24
    • 2018-06-21
    • 2022-11-10
    • 2021-05-07
    相关资源
    最近更新 更多