Обновление Symfony с 4.2 до 4.3 привело к поломке Web Profiler

Я запустил composer update и теперь получаю множество предупреждений об устаревании:

> [2019-06-03 18:08:41] request.INFO: Matched route "_wdt".
> {"route":"_wdt","route_parameters":{"_route":"_wdt","_controller":"web_profiler.controller.profiler::toolbarAction","token":"9354bc"},"request_uri":"http://local
> host:8080/_wdt/9354bc","method":"GET"} [] [2019-06-03 18:08:42]
> request.CRITICAL: Uncaught PHP Exception Twig\Error\RuntimeError:
> "Impossible to access an attribute ("nb_errors") on a string variable
> ("O:39:"Symfony\Component\VarDumper\Cloner\Data":6:{s:45:"ymf
> ony\Component\VarDumper\Cloner\Data

Панель инструментов веб-профилировщика не работает с этой ошибкой:

An error occurred while loading the web debug toolbar.

И все же, когда я это делаю bin/console --version, я получаю:

Symfony 4.3.0 (env: dev, debug: true)

Что дает? А как насчет файла композитор.json, который дает Композитор возможность обновляться даже до 4.3?


Вот мой текущий композитор.json:

{
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": "^7.1.3",
    "ext-iconv": "*",
    "doctrine/doctrine-migrations-bundle": "^2.0",
    "easycorp/easyadmin-bundle": "^1.17",
    "iio/libmergepdf": "~3.0",
    "ramsey/uuid": "^3.5",
    "sensio/framework-extra-bundle": "^5.1",
    "sensiolabs/security-checker": "^5.0",
    "simplisti/jasper-starter": "dev-master",
    "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/ldap": "^4.0",
    "symfony/monolog-bundle": "^3.3",
    "symfony/options-resolver": "^4.0",
    "symfony/orm-pack": "*",
    "symfony/process": "4.2.*",
    "symfony/security-bundle": "4.2.*",
    "symfony/swiftmailer-bundle": "^3.1",
    "symfony/yaml": "4.2.*"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.0",
    "phing/phing": "^2.14",
    "symfony/browser-kit": "^4.0",
    "symfony/css-selector": "^4.0",
    "symfony/debug": "^4.0",
    "symfony/debug-pack": "^1.0",
    "symfony/maker-bundle": "^1.7",
    "symfony/phpunit-bridge": "^4.0",
    "symfony/profiler-pack": "^1.0"
  },
  "config": {
    "preferred-install": {
      "*": "dist"
    },
    "sort-packages": true
  },
  "autoload": {
    "classmap": [
      "src/Legacy/"
    ],
    "psr-4": {
      "App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Tests\\": "tests/"
    }
  },
  "replace": {
    "symfony/polyfill-iconv": "*",
    "symfony/polyfill-php71": "*",
    "symfony/polyfill-php70": "*",
    "symfony/polyfill-php56": "*"
  },
  "scripts": {
    "auto-scripts": {
      "cache:clear": "symfony-cmd",
      "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
      "security-checker security:check": "script"
    },
    "post-install-cmd": [
      "@auto-scripts"
    ],
    "post-update-cmd": [
      "@auto-scripts"
    ]
  },
  "conflict": {
    "symfony/symfony": "*"
  },
  "extra": {
    "symfony": {
      "id": "01C3XNQSBGC1MSASSGCW6TKGXB",
      "allow-contrib": false
    }
  }
}

С какой версии вы обновлялись? Я сделал быстрый тест на свежем проекте 4.3, не сталкиваясь с этими предупреждениями.

Cerad 04.06.2019 13:40

4.2.9 в пятницу...сейчас как-то 4.3.0?!? Вы видите что-нибудь очевидное в моем composer.json в OP?

Alex.Barylski 04.06.2019 14:57

Немного загадки, если не сказать больше. Я взял свежую 4.2.8 и запустил обновление композитора. Как и ожидалось, я получил 4.2.9. Снова запустил обновление, и оно осталось на 4.2.9. В вашем файле composer.json есть несколько ^4.0. Мой нет. Мне редко удается восстановить поврежденные файлы composer.json. Возможно, стоит рассмотреть возможность установки нового проекта 4.2.9, а затем объединить ваши дополнительные зависимости в готовый composer.json.

Cerad 04.06.2019 15:27

Вот о чем я думал ... спасибо за подтверждение моей догадки или предположения, ха-ха :)

Alex.Barylski 04.06.2019 15:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
3
4
3 108
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это проблема в vendor/symfony/web-profiler-bundle/Resources/views/Collector/form.html.twig

Пытаюсь получить доступ к collector.data.nb_errors, но collector.data это null.

Вы нашли решение? Столкнулся с той же проблемой, но не знаю, что делать, чтобы исправить это

rebru 24.07.2019 08:54

@rebru у нас работал принятый комментарий.

Barry Parkin 25.07.2019 09:27
Ответ принят как подходящий

Откройте файл composer.json. Обновите все ссылки 4.2 до 4.3. Вероятно, у вас есть symfony/web-profiler-bundle версии 4.2 вместо 4.3. Сохраните, затем обновите композитор.

Все в значительной степени 4.2. * Не знаете, как 4.3.0 вообще попал туда? Я несколько раз удалял /vendor и composer install... видите что-нибудь очевидное в моем composer.json, добавленном в OP?

Alex.Barylski 04.06.2019 14:56

Это решение сработало для меня. Большое спасибо @afessler! Я обновлял Symfony версии 4.2.* до 4.4.*. Перед запуском скрипта обновления композитора я изменил только "require" с 4.2.* на 4.4.*. Среди других проблем, с которыми я столкнулся, мне также нужно увидеть веб-профилировщик, который не показывался. Следуя этой инструкции, мне пришлось изменить все ссылки с 4.2.* на 4.4.*, чтобы все снова заработало. С этим обновлением мне пришлось изменить use Symfony\Bridge\Doctrine\RegistryInterface; на use Doctrine\Common\Persistence\ManagerRegistry; для классов репозитория.

sylvery 02.12.2019 07:46

Я немного опоздал, но если вы хотите сохранить symfony 4.2, вам просто нужно заменить все ваши зависимости symfony с "^4" на "4.2.*" в composer.json

Например, в вашем json у вас есть "symfony/ldap": "^4.0", поэтому, когда вы запустите composer show, вы увидите, что некоторые зависимости обновляются до 4.3 с помощью composer update.

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