symfony — аннотация доктрины не работает на PHP 7.0

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

Я разрабатываю приложение Symfony 3 с PHP 7.1 на моем ПК. Все работает хорошо. Я попытался загрузить его на свой хост-сервер, который использует PHP 7.0.

Когда я запускаю сайт, я получаю это сообщение об ошибке:

Фатальная ошибка: Uncaught TypeError: Возвращаемое значение Doctrine \ Common \ Annotations \ AnnotationRegistry :: registerLoader () должно быть экземпляром Doctrine \ Common \ Annotations \ void, ни один не возвращен в / home / clients / fb3f5a508aeeb6d39e6d7e1e47bda9ac / vendor doct lib / Doctrine / Common / Annotations / AnnotationRegistry.php: 117 Трассировка стека: # 0 /home/clients/fb3f5a508aeeb6d39e6d7e1e47bda9ac/app/autoload.php(9): Doctrine \ Common \ AnnotationsRegistry / 1 :: ArrayLoader :: registero home / clients / fb3f5a508aeeb6d39e6d7e1e47bda9ac / web / app.php (6): require (‘/ home / clients / f …’) # 2 {main}, брошенный в / home / clients / fb3f5a508aeeb6d39e6d7e1e47bda9ac / libo / /Doctrine/Common/Annotations/AnnotationRegistry.php в строке 117

Я нашел те ссылки, которые кажутся очень полезными:
Фатальная ошибка Symfony
http://www.doctrine-project.org/2017/07/25/php-7.1-requirement-and-composer.html

Но я не мог решить проблему. Я не могу найти, какая версия мне нужна для совместимости с PHP 7.0 …

В моем конфигурационном файле JSON у меня есть:

"platform": {
"php": "7.0"},
"require": {
"php": ">=5.5.9",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"doctrine/orm": "^2.5",
"incenteev/composer-parameter-handler": "^2.0",
"misd/phone-number-bundle": "^1.2",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"symfony/monolog-bundle": "^3.0.2",
"symfony/polyfill-apcu": "^1.0",
"symfony/swiftmailer-bundle": "^2.3.10",
"symfony/symfony": "3.3.*",
"twig/twig": "^1.0||^2.0"},

Что я делаю неправильно? Есть идеи?

Спасибо!

0

Решение

Если вы используете платформу как «php»: «7.0», то вы попробуете этим

  "require": {
"php" : ">=7.0.21",
"symfony/symfony" : "3.3.4",
"doctrine/orm" : "2.5.10",
"doctrine/doctrine-bundle" : "1.6.8",
"doctrine/doctrine-cache-bundle" : "1.3.0",
...

Если вы строго определите версию для всех, будет легко найти ошибку, специфичную для версии.

это работает хорошо для меня.

4

Другие решения

Ваш platform настройка игнорируется, так как вы не обернули ее внутри config узел. Следующий конфиг будет работать:

{
"config": {
"platform": {
"php": "7.0"},
},
"require": {
"php": ">=5.5.9",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"doctrine/orm": "^2.5",
"incenteev/composer-parameter-handler": "^2.0",
"misd/phone-number-bundle": "^1.2",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"symfony/monolog-bundle": "^3.0.2",
"symfony/polyfill-apcu": "^1.0",
"symfony/swiftmailer-bundle": "^2.3.10",
"symfony/symfony": "3.3.*",
"twig/twig": "^1.0||^2.0"}
}
4

Правильный способ — проверить, какой у вас php:

php --version

затем скажите, что композитор автоматически внесет черный список не соответствующих версий

composer config platform.php 7.0.17

затем посмотрим, сможет ли composer понизить этот пакет (и только этот пакет, мы не хотим, чтобы обновления не были связаны; dry-run = только смотрите, не делайте)

composer update doctrine/common --with-dependencies --dry-run

и в моем случае композитор сказал мне, что нам также нужно понизить версию другого пакета, так что я наконец сделал

composer update doctrine/common symfony/dom-crawler --with-dependencies

который сработал.

1

Я обнаружил, что проблема была решена, когда я побежал:

composer update --with-dependencies

Это вытянуло в пропавшие doctrine/annotations зависимость, которая была пропущена, когда я бегал только composer update


...
Package operations: 1 install, 0 updates, 0 removals
- Installing doctrine/annotations (1.7.x-dev 232c5da): Cloning 232c5da390 from cache
Writing lock file
Generating autoload files
...

1

Задача решена! 🙂 Я скачал версию 1.2.7 аннотаций с сайта Doctrine, и это сработало. http://www.doctrine-project.org/projects/annotations.html

Странно то, что на их сайте говорят, что последняя версия — 1.2.7, но я могу загрузить версию 1.4.0 с помощью Composer …

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector