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)
配置不是由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 的更新)。如果每个环境的更改很小,则将所有配置放在一个文件中只是为了方便,但一切都会一样。