Doctrine 2.5.11 вводит проблемы в PHP 7.0

Сегодня обновлял установку сервера и сломал всю мою настройку. Заметил, что доктрина/форма ~2.5.6 загружена 2.5.11, что требует

  • Установка доктрины/коллекций (v1.5.0)
  • Установка доктрины/аннотаций (v1.5.0)
  • Установка доктрины/общих (v2.8.1)
  • Установка доктрины/инстантиатора (1.1.0)
  • Установка доктрины/формы (v2.5.11)

доктрина/коллекции и все остальные пакеты требуют PHP 7.1. Вот почему мое приложение больше не работало. Обновление до 7.1 пока не рассматривалось, поэтому мы исправили зависимости:

, "доктрина/форма" : "2.5.10" , "доктрина/аннотации" : "~1.4.0" , "доктрина/коллекции" : "~1.4.0" , "доктрина/общий" : "~2.7.0" "

Теперь мой вопрос: Правильно ли указан номер версии доктрины/формы 2.5.11? Разве это не должно быть 2.6, поскольку для него требуются зависимости, которые не работают в 7.0, и это нарушит установку?

Проблема возникла из-за того, что (на Mac) версия php отличается от версии apache. Вот почему я думаю, что семантика в нумерации версий должна быть улучшена или требования в пакете doctrine/orm должны быть менее расплывчатыми.

Мне интересно понять, как это можно сделать лучше с моей стороны.

Только для Google добавит сообщение об исключении: возвращаемое значение Doctrine\Common\Annotations\AnnotationRegistry::registerFile() должно быть экземпляром Doctrine\Common\Annotations\void, ни одно из них не возвращено


person Rob    schedule 03.10.2017    source источник


Ответы (1)


A. На ваши вопросы о версиях

1. Верен ли номер версии от doctrine/orm 2.5.11

2. Разве это не должно быть 2.6, поскольку для него требуются зависимости, которые не работают в 7.0, и это нарушит установку?


1. основной.минорный.патч

Одним словом, это семантическое управление версиями.

  • Если вы что-то ИСПРАВЛЯЕТЕ или просто хотите пометить новую версию для загрузки через композитор - patch++
  • Если вы ДОБАВЛЯЕТЕ НОВУЮ функцию - minor++
  • Если вы УДАЛИТЕ некоторые старые функции, это не будет работать - major++

Скачивание любой версии пакета — это первый случай, поскольку композитор не позволит устанавливать пакеты, которые могут что-то сломать.

2. composer update позаботится об этом

Когда ваш код запускается после composer update (когда вы используете общие блокировки версий, такие как ^2.5), нет необходимости в версии major++.

Если у вас PHP 7.0 и вы запускаете composer update, все будет работать.

Composer не загрузит doctrine/orm 2.5.11, потому что он не соответствует вашим местным условиям.


И если вы в будущем обновите свою систему до PHP 7.1 и запустите composer update, composer обновится до doctrine/orm 2.5.11 (или выше), и ваш код будет работать.

Вы также можете найти аналогичное объяснение в официальный пост в документации Doctrine.


B. Как решить эту проблему с различными версиями на локальной и серверной?

Вы можете применить предпочтительную версию в composer.json, используя опцию platform.

"config": {
    "platform": {
        "php": "7.0"
    }
}

Это предпочтет пакеты PHP 7.0 как в вашей локальной системе, так и на сервере.

person Tomas Votruba    schedule 23.10.2017