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 也可以。