Symfony - 为什么“没有扩展能够加载“when@dev”的配置”

Mat*_*der 5 php symfony symfony4

我陷入了深深的困惑,试图最终进入 symfony flex。我在这里跟随 symfonycast ( https://symfonycasts.com/screencast/symfony4-upgrade/flex-alive#play ) 一步一步移动,但我收到一个错误,他没有,并且想知道我是否可以获得关于我哪里出错的提示。

运行 php bin/console 后,我遇到了以下问题:

在 FileLoader.php 第 180 行:

没有扩展能够加载“when@dev”的配置(在“/Users/mattias/Documents/www/webtools/config/package
s/monolog.yaml”中)。查找命名空间“when@dev”,
在 /Users 中找到“”doctrine_cache”、“doctrine”、“fos_user”、“sensio_framework_extra”、“monolog”、“swiftmailer”、“framework”、“twig”、“security” /mattias/Documents/www/webtools/config/packages/monolog.
yaml(在资源“/Users/mattias/Documents/www/webtools/config/packages/monolog.yaml”中加载)。

在 YamlFileLoader.php 第 722 行:

没有扩展能够加载“when@dev”的配置(在“/Users/mattias/Documents/www/webtools/config/package
s/monolog.yaml”中)。查找命名空间“when@dev”,找到“”doctrine_cache”、“doctrine”、“fos_user”、“sensio_framework_extra”、“
monolog”、“swiftmailer”、“framework”、“twig”、“security””。

如果我从 monolog.yml 文件中删除when@dev,则下一部分(when@test)会出现相同的错误,所以我假设还有一些主要接线尚未完成等。

我已经用谷歌搜索了这个错误,但我似乎是第一个

似乎我最终得到了 sym 5 的独白配置,所以我想知道该教程在作曲家指令之一中是否不准确。我现在使用时可能需要将某些组件限制为早期版本?

这是我的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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

msg*_*msg 0

配置不是由bundle(在本例中为monolog)处理的,而是由flex 本身处理的。

软件包安装后,它会运行“配方”来负责创建配置、资产等。您可以在此处找到独白版本的配方。when@在 3.7 之前找不到指令,但声明composer.json^3.1.0. 使用composer show symfony/monolog-bundle查看安装的是什么版本,但我怀疑版本解析会有问题。您可以尝试删除vendor/并重新安装所有软件包。

最简单的方法就是删除config/packages/monolog.yaml. 因为您应该拥有旧的配置,confib/packages/{dev,prod,test}/monolog.yaml一切都应该继续工作。如果不是这种情况,您可以随时重新安装配方composer recipes:install symfony/monolog-bundle --force以将其恢复。

至于教程本身,乍一看,到目前为止一切似乎都不错。

请记住,解析when指令的能力来自framework-bundle>= 5.3。如果您打算一路升级,您可能需要重新安装配方以获取最新的配置(或者可能用于composer recipes:update交互式、基于 git 的更新)。如果每个环境的更改很小,则将所有配置放在一个文件中只是为了方便,但一切都会一样。