Ошибка обновления Laravel 5.5 до 5.6

Пример использования:

objs.sort(sortBy('last_nom'));

Сценарий:

/**
 * @description 
 * Returns a function which will sort an
 * array of objects by the given key.
 * 
 * @param  {String}  key
 * @param  {Boolean} reverse
 * @return {Function}     
 */
function sortBy(key, reverse) {

  // Move smaller items towards the front
  // or back of the array depending on if
  // we want to sort the array in reverse
  // order or not.
  var moveSmaller = reverse ? 1 : -1;

  // Move larger items towards the front
  // or back of the array depending on if
  // we want to sort the array in reverse
  // order or not.
  var moveLarger = reverse ? -1 : 1;

  /**
   * @param  {*} a
   * @param  {*} b
   * @return {Number}
   */
  return function(a, b) {
    if (a[key] < b[key]) {
      return moveSmaller;
    }
    if (a[key] > b[key]) {
      return moveLarger;
    }
    return 0;
  };

}
29
задан patricus 3 February 2018 в 07:36
поделиться

11 ответов

Я сделал это, и это прекрасно работает.

1. composer.json:

От:

"require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0"
    },

До:

"require": {
        "php": ">=7.1.3",
        "fideloper/proxy": "~4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "~1.0"
    },

2. Замените файл app \ Http \ Middleware \ TrustedProxies.php содержимым ниже:

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array
     */
    protected $proxies;

    /**
     * The headers that should be used to detect proxies.
     *
     * @var string
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

3. обновление композитора

54
ответ дан user1040259 3 February 2018 в 07:36
поделиться

Объект запроса Laravel расширяет объект запроса Symfony. Laravel 5.5 зависит от Symfony 3, который имеет эту константу. Laravel 5.6 зависит от Symfony 4, который не имеет этой константы.

Исходя из конфигурации доверенных прокси, похоже, что вы используете пакет доверенных прокси «за пределами» Laravel. Laravel привнес пакет доверенных прокси в платформу в 5.5 и создал специальное \App\Http\Middleware\TrustProxies промежуточное программное обеспечение для использования.

Я бы предложил перейти на использование промежуточного программного обеспечения и настроить его, как описано в документации Laravel . Это поможет предотвратить подобные проблемы совместимости в будущем.

Чтобы выполнить переключение:

  1. В app/Http/Kernel.php, если \Fideloper\Proxy\TrustProxies::class находится в вашем массиве $middleware, удалите его. Если \App\Http\Middleware\TrustProxies::class нет в вашем массиве $middleware, добавьте его.

  2. Откройте файл app/Http/Middleware/TrustProxies.php и обновите его прокси-серверами.

  3. Удалите файл config/trustedproxy.php.

  4. Удалите Fideloper\Proxy\TrustedProxyServiceProvider::class из массива providers в config/app.php.

  5. Обновите файл composer.json, чтобы использовать «fideloper / proxy»: «~ 4.0». Запустите composer update fideloper/proxy, чтобы обновить пакет.

33
ответ дан patricus 3 February 2018 в 07:36
поделиться

Я обновил с 5.5 до 5.6

composer.json

"minimum-stability":"dev",
"prefer-stable": true,

Это установит последние пакеты Laravel, затем возникнет проблема с TrustedProxies.

Установите последнюю версию прокси для Laravel 5.6.

Пожалуйста, используйте тег 4.0+ для Laravel 5.6:

composer require fideloper/proxy:~4.0

Подробнее

9
ответ дан Marcin Orlowski 3 February 2018 в 07:36
поделиться

Первая установка Laravel 5.6 Я также столкнулся с этой ошибкой. Просто выполните следующие шаги, чтобы исправить это:

  • Убедитесь, что требование к файлу composer.json имеет:
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
            },
  • Затем попробуйте composer update убедитесь, что ваш композитор обновлен
  • Наконец запустите: composer require fideloper/proxy:~4.0
  • Готово!
4
ответ дан Vanndy 3 February 2018 в 07:36
поделиться

Всем, кто пытался выполнить обновление непосредственно с laravel 5.5 до 5.7 и тоже сталкивался с этой проблемой, удалите файлrustproxy.php из app->config->trustedproxy.php. Надежды, которые кому-то помогают.

3
ответ дан GabMic 3 February 2018 в 07:36
поделиться

Ваша проблема связана с использованием вами библиотеки TrustedProxy .

Он использует константу HEADER_CLIENT_IP Symfony, которая была устарела в Symfony 3.3 и полностью удалена в Symfony 4.0.

Поскольку Laravel 5.6 обновлен для использования компонентов Symfony 4, это больше не будет работать.

Чтобы решить эту проблему, нужно сделать то, что предложил Патрикус , и использовать промежуточное ПО Laravel TrustProxies.

2
ответ дан Daniel 3 February 2018 в 07:36
поделиться

Я сделал следующие вещи и запустил свой проект на Laravel 5.6-dev:

  • Следовал тому, что Патрик предложил
  • ] Изменил fideloper / proxy на «~ 4.0» и добавил "minimum-stability": "dev", "prefer-stable": true в конец моего файла composer.json.
2
ответ дан Candy 3 February 2018 в 07:36
поделиться

Заменить app \ Http \ Middleware \ TrustedProxies.php на:

    <?php

  namespace App\Http\Middleware;

  use Illuminate\Http\Request;
  use Fideloper\Proxy\TrustProxies as Middleware;

  class TrustProxies extends Middleware
  {
    protected $proxies;
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
  }

Заменить config \rustproxy.php на:

<?php

return [
    'proxies' => null,
    'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,  
];
2
ответ дан Mehdi 3 February 2018 в 07:36
поделиться

Ни одно из предложений здесь не помогло мне по какой-то причине. Я использую панель quickadmin и различные зависимости, которые могут иметь к этому какое-то отношение.

Что в итоге сработало, так это удаление laravel / dusk, а затем обновление до "fideloper/proxy": "~4.0", самостоятельно. Затем обновите laravel / framework до 5.6, затем переустановите dusk.

Мне не нужно: "minimum-stability":"dev", "prefer-stable": true,

Может быть, это было исправлено с последними обновлениями.

1
ответ дан fred 3 February 2018 в 07:36
поделиться

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

Просто следуйте официальному руководству по обновлению из https://laravel.com/docs/5.6/upgrade и вместе с этим удалите файл конфигурации trustedproxy, расположенный в config/trustedproxy.php

1
ответ дан nasirkhan 3 February 2018 в 07:36
поделиться

Та же проблема была в Laravel 5.7. Вы можете добавить TELESCOPE_ENABLED=false в .env или .env.dusk.local: Источник

.
0
ответ дан yunas 3 February 2018 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: