Symfony迁移Flex时when@dev配置加载错误求助
问题
迁移到Symfony Flex并按照Symfony4升级教程操作时,执行php bin/console触发错误:无法加载/Users/mattias/Documents/www/webtools/config/packages/monolog.yaml中的when@dev配置,提示未找到对应扩展命名空间;移除when@dev后,when@test也出现相同错误。怀疑获取到了适配Symfony5的Monolog配置,现提供项目composer.json内容:
{ "name": "a/b", "license": "proprietary", "type": "project", "autoload": { "psr-4": { "AppBundle\\": "src/AppBundle", "App\\": "src/" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, "autoload-dev": { "psr-4": { "Tests\\AppBundle\\": "tests/AppBundle", "App\\Tests\\": "tests/" } }, "repositories": [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.11.1", "dist": { "url": "https://code.jquery.com/jquery-1.11.1.js", "type": "file" } } } ], "require": { "php": "^7.1.3", "doctrine/doctrine-bundle": "^1.6", "doctrine/doctrine-cache-bundle": "^1.2", "doctrine/orm": "^2.5", "friendsofsymfony/user-bundle": "~2.1", "sensio/framework-extra-bundle": "^5.0.0", "symfony/console": "^4.0", "symfony/flex": "^1.19", "symfony/framework-bundle": "^4.0", "symfony/lts": "^4@dev", "symfony/monolog-bundle": "^3.1.0", "symfony/polyfill-apcu": "^1.0", "symfony/swiftmailer-bundle": "^3.1", "symfony/yaml": "^4.0", "twig/twig": "^1.0||^2.0" }, "require-dev": { "symfony/dotenv": "^4.0", "symfony/phpunit-bridge": "^4.0" }, "config": { "preferred-install": { "*": "dist" }, "sort-packages": true, "allow-plugins": { "symfony/flex": true } }, "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "post-install-cmd": [ "@auto-scripts" ], "post-update-cmd": [ "@auto-scripts" ] }, "conflict": { "symfony/symfony": "*" }, "extra": { "symfony": { "id": "", "allow-contrib": false } } }
解决方案
核心原因
when@dev/when@test这种内联环境配置语法是Symfony 4.3及以上版本才支持的特性,而你的项目当前依赖的Symfony版本可能低于4.3,同时symfony/monolog-bundle版本范围过宽,拉取了兼容Symfony5的配置文件,导致语法不兼容。
1. 锁定Monolog Bundle适配Symfony4的版本
修改composer.json中symfony/monolog-bundle的版本约束,确保只安装Symfony4兼容的分支:
"symfony/monolog-bundle": "^3.5"
^3.5是Symfony4兼容的最高稳定分支,不会引入Symfony5专属的配置格式。
2. 调整配置文件语法(若保留Symfony<4.3版本)
如果不想升级Symfony核心版本到4.3+,需要将内联的环境配置拆分到对应环境目录:
- 将
monolog.yaml中when@dev区块的内容,移动到config/packages/dev/monolog.yaml文件 - 将
when@test区块的内容,移动到config/packages/test/monolog.yaml文件 - 主
config/packages/monolog.yaml仅保留所有环境通用的配置项
3. 更新依赖
修改composer.json后,执行以下命令更新依赖并清理缓存:
composer update php bin/console cache:clear
可选:锁定Symfony Flex版本
若Flex自动拉取高版本配置文件,可将其版本限制为Symfony4适配范围:
"symfony/flex": "^1.10"
内容的提问来源于stack exchange,提问作者Matt Welander
相关产品推荐
相关产品推荐

