错误:将 laravel 8 更新到 9 时。脚本 @php artisan package:discover --ansi 处理返回的 post-autoload-dump 事件,错误代码为 1

Saj*_*oje 51 laravel-8 laravel-9

\n

无需安装、更新或删除\n生成优化的自动加载文件\n位于 C:/wamp64/www/vuexylaravel/app\\Helpers\\helpers.php 的类 App\\Helpers\\Helper 不符合\npsr-4 自动加载标准。跳过。\n> Illuminate\\Foundation\\ComposerScripts::postAutoloadDump\n> @php artisan package:discover --ansi

\n
\n
   Error \n\n  Undefined constant Illuminate\\Http\\Request::HEADER_X_FORWARDED_ALL\n  at C:\\wamp64\\www\\vuexylaravel\\vendor\\fideloper\\proxy\\config\\trustedproxy.php:48\n     44\xe2\x96\x95      * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)\n     45\xe2\x96\x95      *\n     46\xe2\x96\x95      * @link https://symfony.com/doc/current/deployment/proxies.html\n     47\xe2\x96\x95      */\n  \xe2\x9e\x9c  48\xe2\x96\x95     'headers' => Illuminate\\Http\\Request::HEADER_X_FORWARDED_ALL,\n     49\xe2\x96\x95\n     50\xe2\x96\x95 ];\n     51\xe2\x96\x95\n\n  1   C:\\wamp64\\www\\vuexylaravel\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\ServiceProvider.php:138\n      require()\n\n  2   C:\\wamp64\\www\\vuexylaravel\\vendor\\fideloper\\proxy\\src\\TrustedProxyServiceProvider.php:28\n      Illuminate\\Support\\ServiceProvider::mergeConfigFrom("C:\\wamp64\\www\\vuexylaravel\\vendor\\fideloper\\proxy\\config\\trustedproxy.php", "trustedproxy")\nScript @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1\n
Run Code Online (Sandbox Code Playgroud)\n

小智 94

上面那位同事的回答,原则上是对的。只是他忘了提到,在文件中进行所有更改后,您需要删除该包fideloper/proxy

https://laravel.com/docs/9.x/upgrade

可信代理

影响的可能性:低

如果您通过将现有应用程序代码导入全新的 Laravel 9 应用程序框架来将 Laravel 8 项目升级到 Laravel 9,则可能需要更新应用程序的“可信代理”中间件。

在您的app/Http/Middleware/TrustProxies.php文件中,更新use Fideloper\Proxy\TrustProxies as Middlewareuse Illuminate\Http\Middleware\TrustProxies as Middleware.

接下来,在 中app/Http/Middleware/TrustProxies.php,您应该更新$headers属性定义:

// Before...
protected $headers = Request::HEADER_X_FORWARDED_ALL;

// After...
protected $headers =
   Request::HEADER_X_FORWARDED_FOR |
   Request::HEADER_X_FORWARDED_HOST |
   Request::HEADER_X_FORWARDED_PORT |
   Request::HEADER_X_FORWARDED_PROTO |
   Request::HEADER_X_FORWARDED_AWS_ELB;
Run Code Online (Sandbox Code Playgroud)

fideloper/proxy最后,您可以从应用程序中删除Composer 依赖项:

composer remove fideloper/proxy

  • 非常感谢,但在那之后我得到了“目标类 [Fruitcake\Cors\HandleCors] 不存在。”抱歉,我只需要从 app/Http/Kernel.php 中删除“\Fruitcake\Cors\HandleCors::class,”: ` 受保护的$中间件 = [ (6认同)

Saj*_*oje 43

如果您通过将现有应用程序代码导入全新的 Laravel 9 应用程序框架来将 Laravel 8 项目升级到 Laravel 9,则可能需要更新应用程序的“可信代理”中间件。

在您的app/Http/Middleware/TrustProxies.php文件中,更新:

use Fideloper\Proxy\TrustProxies as Middleware

use Illuminate\Http\Middleware\TrustProxies as Middleware

接下来,在 中app/Http/Middleware/TrustProxies.php,您应该更新$headers属性定义:

// 前...

protected $headers = Request::HEADER_X_FORWARDED_ALL;
Run Code Online (Sandbox Code Playgroud)

// 后...

protected $headers =
    Request::HEADER_X_FORWARDED_FOR |
    Request::HEADER_X_FORWARDED_HOST |
    Request::HEADER_X_FORWARDED_PORT |
    Request::HEADER_X_FORWARDED_PROTO |
    Request::HEADER_X_FORWARDED_AWS_ELB;
Run Code Online (Sandbox Code Playgroud)

然后运行composer update

确保您使用的是 PHP 8.0


Had*_*azi 7

如果上述答案对您不起作用并且您遇到相同的错误,请再执行一行以从composer.json 中删除 fideloper/proxy。

// Before...
protected $headers = Request::HEADER_X_FORWARDED_ALL;
 
// After...
protected $headers =
    Request::HEADER_X_FORWARDED_FOR |
    Request::HEADER_X_FORWARDED_HOST |
    Request::HEADER_X_FORWARDED_PORT |
    Request::HEADER_X_FORWARDED_PROTO |
    Request::HEADER_X_FORWARDED_AWS_ELB;
Run Code Online (Sandbox Code Playgroud)

这将从composer.json中删除代理,并且异常将消失。

composer remove fideloper/proxy
Run Code Online (Sandbox Code Playgroud)

laravel 9 升级指南中正确提到了这一点。 https://laravel.com/docs/9.x/upgrade#the-assert-deleted-method