【问题标题】:Error: While updating laravel 8 to 9. Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1错误:将 laravel 8 更新到 9 时。脚本 @php artisan package:discover --ansi 处理返回的 post-autoload-dump 事件,错误代码为 1
【发布时间】:2022-05-03 22:26:11
【问题描述】:

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

   Error 

  Undefined constant Illuminate\Http\Request::HEADER_X_FORWARDED_ALL
  at C:\wamp64\www\vuexylaravel\vendor\fideloper\proxy\config\trustedproxy.php:48
     44▕      * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)
     45▕      *
     46▕      * @link https://symfony.com/doc/current/deployment/proxies.html
     47▕      */
  ➜  48▕     'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
     49▕
     50▕ ];
     51▕

  1   C:\wamp64\www\vuexylaravel\vendor\laravel\framework\src\Illuminate\Support\ServiceProvider.php:138
      require()

  2   C:\wamp64\www\vuexylaravel\vendor\fideloper\proxy\src\TrustedProxyServiceProvider.php:28
      Illuminate\Support\ServiceProvider::mergeConfigFrom("C:\wamp64\www\vuexylaravel\vendor\fideloper\proxy\config\trustedproxy.php", "trustedproxy")
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1

【问题讨论】:

    标签: laravel-8 laravel-9


    【解决方案1】:

    原则上,回答上述问题的同事是正确的。只是他忘了提,文件全部修改后,需要删除包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 Middleware 更新为use 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;
    

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

    composer remove fideloper/proxy

    【讨论】:

    • 非常感谢,但在那之后我得到了Target class [Fruitcake\Cors\HandleCors] does not exist. 抱歉,我只需要从 app/Http/Kernel.php 中删除 \Fruitcake\Cors\HandleCors::class, :`protected $middleware = [
    【解决方案2】:

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

    在您的 app/Http/Middleware/TrustProxies.php 文件中,更新 使用 Fideloper\Proxy\TrustProxies 作为中间件使用 Illuminate\Http\Middleware\ TrustProxies 作为中间件

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

    // 之前...

    受保护的 $headers = 请求::HEADER_X_FORWARDED_ALL;

    // 之后...

    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;
    

    然后运行composer update

    确保您使用的是 PHP 8.0

    【讨论】:

      【解决方案3】:

      如果上述答案对您不起作用并且您遇到相同的错误,请再执行一行以从 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;
      

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

      composer remove fideloper/proxy
      

      在 laravel 9 升级指南中已正确提及。 https://laravel.com/docs/9.x/upgrade#the-assert-deleted-method

      【讨论】:

      • 当我运行composer remove fideloper/proxy 时,得到这个新错误:未定义的数组键“格式”,你知道如何修复它吗?
      【解决方案4】:

      遵循对我有用的 laravel 升级文档后我做了两件事:

      1. 手动进入 composer.json 并删除 fideloper/proxy

      运行作曲家更新。如果您仍然遇到问题。关注下一个:

      1. 检查此文件 TrustProxies.php 是否存在于 vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php 如果不是,您可以从旧文件复制。

      【讨论】:

        【解决方案5】:

        我通过删除“config/trustedproxy.php”来修复它。我在 app\Http\Middleware 的目录中没有 TrustProxies 中间件

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        • 不知道为什么我也有这个文件(在官方 github repo 上找不到),但删除它解决了我的问题。谢谢!
        猜你喜欢
        • 2023-03-16
        • 2018-11-23
        • 2019-03-29
        • 2019-05-28
        • 2020-04-24
        • 2020-05-27
        • 1970-01-01
        • 2021-12-22
        • 2021-08-07
        相关资源
        最近更新 更多