PHP 7.2 抛出 运行 "composer require symfony/dotenv", 7.1 不会
PHP 7.2 throws run "composer require symfony/dotenv", 7.1 does not
在 PHP 7.1 中构建(和工作)的 Symfony 4.2 应用程序,当切换到 7.2 时抛出
Fatal error: Uncaught RuntimeException: Please run "composer require
symfony/dotenv" to load the ".env" files configuring the
application...
此外,composer update
产生 Nothing to install or update
然后
Script cache:clear returned with error code 255 !! !! Fatal error:
Uncaught RuntimeException: You need to add "symfony/framework-bundle"
as a Composer dependency. in
G:\Documents\workspace\mana\bin\console:14
更新composer.json要求PHP 7.2后,现在包括:
"require": {
"php": "^7.2",
"ext-ctype": "*",
"ext-iconv": "*",
"beberlei/doctrineextensions": "^1.1",
"easycorp/easyadmin-bundle": "^2.0",
"knplabs/knp-snappy-bundle": "^1.6",
"ob/highcharts-bundle": "^1.6",
"sensio/framework-extra-bundle": "^5.1",
"symfony/asset": "4.2.*",
"symfony/console": "4.2.*",
"symfony/dotenv": "4.2.*",
"symfony/expression-language": "4.2.*",
"symfony/flex": "^1.1",
"symfony/form": "4.2.*",
"symfony/framework-bundle": "4.2.*",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "*",
"symfony/process": "4.2.*",
"symfony/security-bundle": "4.2.*",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.1",
"symfony/templating": "4.2.*",
"symfony/test-pack": "^1.0",
"symfony/translation": "4.2.*",
"symfony/twig-bundle": "4.2.*",
"symfony/validator": "4.2.*",
"symfony/web-link": "4.2.*",
"symfony/webpack-encore-bundle": "^1.0",
"symfony/yaml": "4.2.*"
},
编辑:如果按照错误消息中的建议,composer update
是 运行,则会发生以下情况。从上面的composer.json
可以看出,这是无稽之谈。
Fatal error: Uncaught RuntimeException: You need to add
"symfony/framework-bundle" as a Composer dependency. in
G:\Documents\workspace\mana\bin\console:14
编辑#2:
这似乎不是 Symfony 或 PHP 问题。我在 Windows 工作,并且有一个 Hyper-V Ububtu 18 服务器 运行 在 Apache/2.4.29,PHP 版本 7.2.19 中复制应用程序,没有问题。让它变得更难整理。搁置此问题?
编辑 #3:
恢复两个月前的 Windows 图像并获得相同的效果。返回到当前图像,了解到上述错误在此框的 PHP 7.10 和 7.16 之间的某处开始。将 Symfony 升级到 4.3 没有帮助。啊啊啊啊!
最终编辑:
解决这个问题超出了我的技能范围。我将以 PHP 7.2.20 的输出结束。没有创建 dev.log。 Netbeans 11 似乎无法识别 xdebug。这里:
(1/1) FatalErrorException
Error: During class fetch: Uncaught ReflectionException: Class
PHPUnit\Framework\TestCase not found in
G:\Documents\workspace\mana\vendor\symfony\framework-bundle\Test\KernelTestCase.php:24
Stack trace:
0 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
1 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass('Symfony\Bundle\...')
2 G:\Documents\workspace\mana\vendor\symfony\framework-bundle\Test\WebTestCase.php(22):
spl_autoload_call('Symfony\Bundle\...')
3 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
4 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass('Symfony\Bundle\...')
5 G:\Documents\workspace\mana\vendor\liip\functional-test-bundle\src\Test\WebTestCase.php(41):
spl_autoload_call('Symfony\Bundle\...')
6 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
7 [internal function]: Sy in KernelTestCase.php line 24
使用最简单的可能解决方案摆脱困境 - 一直移动到 PHP 7.3.7。
这已经相当老了,但我最近 运行 广泛地研究了这个问题,因为我一点也不熟悉 PHP 它让我发疯。只是想 post 这个以防它可以帮助其他人。关于 symfony/dotenv
,加载路径似乎有时只是搞砸了。通过 运行 宁以下行,我能够 "live require" dotenv,即使正常的 PHP 加载机制不能完全做到:
sed '14irequire("/var/www/html/vendor/symfony/dotenv/Dotenv.php");' -i /var/www/html/vendor/symfony/flex/src/Command/DumpEnvCommand.php;
前导 /var/www/html
将被替换为 vendor/
目录之前的任何内容。它所做的只是向 PHP 似乎没有正确要求的文件插入一条 require 语句。在 运行 之后,我可以 运行 composer dump-env prod
没有错误。
我不会真的称之为最优雅的解决方案,但它确实为我完成了工作。
这个问题困扰我将近三个小时了。事实证明,我不得不将我的 flex 版本降级到 1.6,因为更高版本的 flex 需要至少 4.4 的 dotenv 版本。
我在这里找到了解决方法:https://github.com/symfony/flex/pull/570
我也遇到了这个问题,但就我而言,问题是 composer 已更新到 2.0.11,这就是产生错误的原因 Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.
我回到 composer 2.0.8,一切都是又好了。我相信 2.0.9 也可以。
在 PHP 7.1 中构建(和工作)的 Symfony 4.2 应用程序,当切换到 7.2 时抛出
Fatal error: Uncaught RuntimeException: Please run "composer require symfony/dotenv" to load the ".env" files configuring the application...
此外,composer update
产生 Nothing to install or update
然后
Script cache:clear returned with error code 255 !! !! Fatal error: Uncaught RuntimeException: You need to add "symfony/framework-bundle" as a Composer dependency. in G:\Documents\workspace\mana\bin\console:14
更新composer.json要求PHP 7.2后,现在包括:
"require": {
"php": "^7.2",
"ext-ctype": "*",
"ext-iconv": "*",
"beberlei/doctrineextensions": "^1.1",
"easycorp/easyadmin-bundle": "^2.0",
"knplabs/knp-snappy-bundle": "^1.6",
"ob/highcharts-bundle": "^1.6",
"sensio/framework-extra-bundle": "^5.1",
"symfony/asset": "4.2.*",
"symfony/console": "4.2.*",
"symfony/dotenv": "4.2.*",
"symfony/expression-language": "4.2.*",
"symfony/flex": "^1.1",
"symfony/form": "4.2.*",
"symfony/framework-bundle": "4.2.*",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "*",
"symfony/process": "4.2.*",
"symfony/security-bundle": "4.2.*",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.1",
"symfony/templating": "4.2.*",
"symfony/test-pack": "^1.0",
"symfony/translation": "4.2.*",
"symfony/twig-bundle": "4.2.*",
"symfony/validator": "4.2.*",
"symfony/web-link": "4.2.*",
"symfony/webpack-encore-bundle": "^1.0",
"symfony/yaml": "4.2.*"
},
编辑:如果按照错误消息中的建议,composer update
是 运行,则会发生以下情况。从上面的composer.json
可以看出,这是无稽之谈。
Fatal error: Uncaught RuntimeException: You need to add "symfony/framework-bundle" as a Composer dependency. in G:\Documents\workspace\mana\bin\console:14
编辑#2: 这似乎不是 Symfony 或 PHP 问题。我在 Windows 工作,并且有一个 Hyper-V Ububtu 18 服务器 运行 在 Apache/2.4.29,PHP 版本 7.2.19 中复制应用程序,没有问题。让它变得更难整理。搁置此问题?
编辑 #3: 恢复两个月前的 Windows 图像并获得相同的效果。返回到当前图像,了解到上述错误在此框的 PHP 7.10 和 7.16 之间的某处开始。将 Symfony 升级到 4.3 没有帮助。啊啊啊啊!
最终编辑: 解决这个问题超出了我的技能范围。我将以 PHP 7.2.20 的输出结束。没有创建 dev.log。 Netbeans 11 似乎无法识别 xdebug。这里:
(1/1) FatalErrorException
Error: During class fetch: Uncaught ReflectionException: Class PHPUnit\Framework\TestCase not found in G:\Documents\workspace\mana\vendor\symfony\framework-bundle\Test\KernelTestCase.php:24 Stack trace:
0 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
1 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass('Symfony\Bundle\...')
2 G:\Documents\workspace\mana\vendor\symfony\framework-bundle\Test\WebTestCase.php(22):
spl_autoload_call('Symfony\Bundle\...')
3 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
4 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass('Symfony\Bundle\...')
5 G:\Documents\workspace\mana\vendor\liip\functional-test-bundle\src\Test\WebTestCase.php(41):
spl_autoload_call('Symfony\Bundle\...')
6 G:\Documents\workspace\mana\vendor\symfony\debug\DebugClassLoader.php(159):
require('G:\Documents\wo...')
7 [internal function]: Sy in KernelTestCase.php line 24
使用最简单的可能解决方案摆脱困境 - 一直移动到 PHP 7.3.7。
这已经相当老了,但我最近 运行 广泛地研究了这个问题,因为我一点也不熟悉 PHP 它让我发疯。只是想 post 这个以防它可以帮助其他人。关于 symfony/dotenv
,加载路径似乎有时只是搞砸了。通过 运行 宁以下行,我能够 "live require" dotenv,即使正常的 PHP 加载机制不能完全做到:
sed '14irequire("/var/www/html/vendor/symfony/dotenv/Dotenv.php");' -i /var/www/html/vendor/symfony/flex/src/Command/DumpEnvCommand.php;
前导 /var/www/html
将被替换为 vendor/
目录之前的任何内容。它所做的只是向 PHP 似乎没有正确要求的文件插入一条 require 语句。在 运行 之后,我可以 运行 composer dump-env prod
没有错误。
我不会真的称之为最优雅的解决方案,但它确实为我完成了工作。
这个问题困扰我将近三个小时了。事实证明,我不得不将我的 flex 版本降级到 1.6,因为更高版本的 flex 需要至少 4.4 的 dotenv 版本。
我在这里找到了解决方法:https://github.com/symfony/flex/pull/570
我也遇到了这个问题,但就我而言,问题是 composer 已更新到 2.0.11,这就是产生错误的原因 Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.
我回到 composer 2.0.8,一切都是又好了。我相信 2.0.9 也可以。