Ошибка: при обновлении laravel 8 до 9. Скрипт @php artisan package:discover --ansi обрабатывает событие post-autoload-dump, возвращенное с кодом ошибки 1

Нечего устанавливать, обновлять или удалять Создание оптимизированных файлов автозагрузки Класс 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

8 ответов

Коллега с ответом выше в принципе прав. Только забыл упомянуть, что после всех изменений в файле нужно удалить пакет:

https://laravel.com/docs/9.x/обновление

Доверенные прокси

Вероятность воздействия: низкая

Если вы обновляете свой проект Laravel 8 до Laravel 9, импортируя существующий код приложения в совершенно новый скелет приложения Laravel 9, вам может потребоваться обновить промежуточное программное обеспечение «доверенного прокси» вашего приложения.

В вашем файле обновите 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/proxyComposer зависимость от вашего приложения :

composer remove fideloper/proxy

Если вы обновляете свой проект Laravel 8 до Laravel 9, импортируя существующий код приложения в совершенно новый скелет приложения Laravel 9, вам может потребоваться обновить промежуточное программное обеспечение «доверенного прокси» вашего приложения.

В вашем файле app/Http/Middleware/TrustProxies.php обновите использование Fideloper\Proxy\TrustProxies в качестве промежуточного программного обеспечения, чтобы использовать Illuminate\Http\Middleware\TrustProxies в качестве промежуточного программного обеспечения .

Затем в app/Http/Middleware/TrustProxies.php вы должны обновить определение свойства $headers:

// До...

защищенные заголовки $ = Request::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

Если приведенный выше ответ не работает для вас, и вы получаете ту же ошибку, выполните еще одну строку для удаления fideloper/proxy из composer.json.

      // 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

Если вы обновляете свой проект Laravel 8 до Laravel 9, импортируя существующий код приложения в совершенно новый скелет приложения Laravel 9, вам может потребоваться обновить промежуточное программное обеспечение «доверенного прокси» вашего приложения.

В вашем файле app/Http/Middleware/TrustProxies.php обновите использование Fideloper\Proxy\TrustProxies в качестве промежуточного программного обеспечения, чтобы использовать Illuminate\Http\Middleware\TrustProxies в качестве промежуточного программного обеспечения.

Затем в 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:

композитор удалить fideloper/proxy

Если вы обновляете свой проект Laravel 8 до Laravel 9, импортируя существующий код приложения в совершенно новый скелет приложения Laravel 9, я попробовал это решение ниже.

а) Я исправил это, удалив «config/trustedproxy.php». У меня не было промежуточного программного обеспечения TrustProxies в каталоге app\Http\Middleware на моей стороне.

В основном все вышеперечисленные ответы говорят одно и то же, документы Laravel верны, просто следуйте инструкциям.

Но если у вас все еще есть та же ошибка (как и у меня), удалите файл «config/trustedproxy.php». Это исправляет ошибку.

Две вещи, которые я сделал после выполнения документа по обновлению laravel, который сработал для меня:

  1. Вручную зайдите в composer.json и удалите fideloper/proxy

Запустите обновление композитора. Если вы все еще получаете вопрос. Следуйте дальше:

  1. Проверьте, присутствует ли этот файл TrustProxies.php , расположенный по адресу vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php, если нет, вы можете скопировать из старого.

вам нужно удалить файл «config/trustedproxy.php»

После запуска обновления композитора

Другие вопросы по тегам