Дата релиза: 4 июня 2020
Активная поддержка до: 16 ноября 2020
Поддержка безопасности до: 2 июня 2021
Данный релиз является переходным с Drupal 8 на Drupal 9.
Drupal 9.0.0 API совместим с Drupal 8.9.0. Главное отличие между версиями — Drupal 9.0.0 не содержит код, который помечен @deprecated
в Drupal 8.9.0.
Изменения в данной версии минимальны, по причине того что все силы направлены на чистку устаревшего кода Drupal 8.
Новый функционал и возможности будут добавляться начиная с Drupal 9.1.0.
¶Drupal 8.8.0 — минимальная версия для обновления на Drupal 9
Для обновления с Drupal 8 до Drupal 9 необходимо иметь как минимум версию Drupal 8.8.0.
Изменение связано с тем, что все апдейт хуки до 8.8.0-rc1 были удалены из Drupal 9. Это означает, что Drupal 9 не содержит обновлений для базы данных для более ранних версий и вы не сможете корректно произвести обновление.
Перед обновлением до Drupal 9, вам будет необходимо обновить сайт как минимум до Drupal 8.8.0, а затем обновляться до Drupal 9.
¶Исходный код jQuery UI был добавлен в ядро Drupal
Библиотеки что не были удалены в Drupal 8.8.0 форкнуты в ядро Drupal 9. Данный код будет поддерживаться сообществом на случай обнаружения различных уязвимостей до конца поддержки Drupal 9. Цель: заменить использование всех библиотек и пометить их устаревшими до релиза Drupal 10.
Ранее Drupal ядро содержало минифицированные версии данных JavaScript библиотек, теперь будет доступен и их исходный код соответствующий jQuery UI 1.12.1.
¶Представлена новая «стабильная» тема оформления специально для Drupal 9 — Stable 9
Stable 9 — новая «стабильная» тема оформления поставляемая с Drupal 9. Основной задачей данной темы является сохранения слоя обратной совместимости с ядром на уровне разметки, CSS и JavaScript.
¶Отличия от Stable темы Drupal 8
-
Все шаблоны и CSS файлы были обновлены для соответствия актуальным версиям в модулях.
-
normalize.css
обновлён с 3.0.3 до 8.0.1. -
Тема Stable 9 хранит в себе копии всех изображений из
/modules
и/misc
. Копии хранятся только для тех изображений, который были изменены. -
Неиспользуемые шаблоны и CSS файлы были удалены. В данный список вошли:
-
file.admin.css
-
filter.admin.css
-
simpleteset-result-summary.html.twig
-
¶Моя тема расширяет Stable от Drupal 8, что мне нужно сделать?
Stable тема от Drupal 8 будет поддерживаться и поставляться с ядром Drupal 9, но данная тема будет удалена в Drupal 10 и перенесена в контриб проект. Таким образом, необходимо будет отрефакторить свою тему на новую за время жизни Drupal 9.
¶Моя тема расширяет Classy, что мне нужно сделать?
Classy продолжит расширять Stable от Drupal 8. Будущее Classy после Drupal 9 на данный момент обсуждается. Тем не менее, тема будет поддерживаться либо ядром, либо как контриб проект.
¶info.yml файлы больше не принимают параметр «core»
Поддержка параметра core
в info.yml
файлах была удалена. Вместо него необходимо использовать новый параметр core_version_requirment
, который доступен начиная с Drupal 8.7.7.
¶Оформление и темизация
- #3103178 Темы оформления из ядра (Bartik, Claro, Seven и Umami) больше не наследуются от Classy. Тема Classy будет переведена в контриб до релиза Drupal 10.
-
#3115102 Добавлен полифил
es6-promise
(stefanpenner/es6-promise) для поддержкиPromise
. -
#3113447 Добавлен полифил
drupal.object.assign
для поддержкиObject.assign()
. -
#3113446 Добавлен полифил
drupal.array.find
для поддержкиArray.find()
. - #3112670 Popper.js обновлён до версии 2.0.6.
-
#3116334 Обновлён шаблон
update-version.html.twig
для поддержкиcore_compatibility_details
. -
#3117217 В темах ядра произведена чистка зависимостей от
stable
темы оформления. -
#2821525
normalize.css
обновлён до актуальной версии 8.0.1. - #3117330 Использование функций темизации теперь будет вызывать явную ошибку, так как они являются устаревшими начиная с Drupal 8.8.x и будут удалены в Drupal 10.
- #3115223 Stable больше не используется как базовая тема в ядре.
¶Aggregator
-
#3046957 Справка из
hook_help()
конвертирована в Help Topics.
¶Claro
-
#3109351 Удалена библиотека
image-widget
стили которой нигде не использовались.
¶Composer
- #3133442 Обновлены зависимости ядра.
-
#3032686 Неиспользуемые в Drupal 9 зависимости удалены:
jcalderonzumba/gastonjs
,jcalderonzumba/mink-phantomjs-driver
,paragonie/random_compat
,phpunit/phpunit-mock-objects
,brumann/polyfill-unserialize
,doctrine/cache
,doctrine/collections
,doctrine/common
,doctrine/inflector
,paragonie/random_compat
,phpunit/phpunit-mock-objects
. -
#3134648
drupal/core-recommended
больше не запрашиваетcomposer/installers
. - #3144204 Зависимости ядра обновлены перед предстоящим релизом.
¶Contact
-
#3067617 Справка из
hook_help()
конвертирована в Help Topics.
¶Database API
-
#2986452 Название колонок и синонимов должны оборачиваться квадратными скобками (
[]
) при использованииConnection::query
,db_query()
,ConditionInterface::where
. -
#2986894 Удалён метод
\Drupal\Core\Database\Connection::identifierQuote
и добавлено свойство\Drupal\Core\Database\Connection::$identifierQuotes
. -
#3123376 Функция
update_fix_incompatibility()
была удалена так как она не нужна в Drupal 9, а также, теоретически, может привести к повреждению данных. -
#3112476
Database::getDatabaseDriverNamespace
помечен устаревшим, вместо него используйте$info['namespace']
. -
#3119170 Из
pgsql/Schema::findPrimaryKeyColumns
удалено решение для реализацииarray_position
для PosgreSQL 9.5 и ниже. Начиная с PostgreSQL 9.6 данная функция появилась в БД, а Drupal 9 требует PosgtgreSQL 10+. -
#3124354 Собственные или контриб драйвера БД теперь опционально объявлять свои классы для запросов БД. Ядро теперь предоставляет реализации по умолчанию
Drupal\Core\Database\Query
.
¶Entity API
-
#3118998 Параметр
$memory_cache
в конструктореContentEntityStorageBase
больше не принимает значениеNULL
по умолчанию. Таким образом, параметр становится обязательным.
¶Help Topics
-
#3055317 Справки для history, statistics и tracker модулей конвертированы из
hook_help()
в Help Topics.
¶JavaScript
- #3107918 Прекращена поддержка Node.js 8, Drupal теперь запрашивает Node.js 12.
-
#3107926
stylelint
обновлён до^13.0.0
.
¶Migrate
-
#3134459 Из кода удалены метки
@group legacy
.
¶Menu
-
#3025394
MenuActiveTrail
теперь хранит Cache ID для избежания некорректного кеширования для 403 ответов.
¶System
- #3137414 Логотип на странице статуса сайта заменён на новый для Drupal 9.
- #3138671 Исправлены опечатки в слове «incompatitable».
¶Twig
-
#3117250
StringLoader
иTestLoader
обновлены для поддержки Twig 3.
¶Workspaces
-
#3108416 Удалено обновление
workspace_update_8803()
. Добавлено предупреждение, что прежде чем обновляться до Drupal 9, сначала необходимо обновиться до 8.8.2 как минимум.
¶Тестирование
- #3098322 Дампы базы данных для тестирования обновлений обновлены до Drupal 8.8.x.
- #3112907 Модуль Simpletest удалён из ядра и перенесён в контриб.
-
#3055197 Убрана проверка на исключение
Goutte\Client
, так как в Symfony 5 отсутствуетSymfony\Component\BrowserKit\Client
. - #3116856 Теперь тесты будут фейлится при наличии предупреждений. Также исправлены предупреждения PHPUnit8 которые несовместимы с PHPUnit 9.
-
#3119027 Для теста
RestSettingsDeletionUpdateTest
теперь используетсяdrupal-8.8.0.filled.standard.php.gz
, так как там уже включён модуль Rest. - #3113211 Добавлен тест, проверяющий что темы из ядра не расширяют Stable и не используют её ассетов.
-
#3114041
::setUp
доработан для корректной работы с PHPUnit 8. -
#3119910 В
EntityQueryTest
использование кавычек заменено на квадратные скобки. - #3122961 PHPUnit 8 ругается на расширение конструктора, поэтому тесты теперь не расширяют конструктор.
-
#3126792 Использование
::assertAttributeSame
прекращено, так как он устарел. Вместо него используется::assertSame
. -
#3126569 Использование
::assertAttributeEmpty
прекращено, так как он устарел. Вместо него используется::assertNull
. -
#3126848 Использование параметра
$ignoreCase
для::assertContains
прекращено. -
#3107732 Для методов
::setUp
,::tearDown
,::setUpBeforeClass
и:assertPostConditions
добавлены тайпхинты. -
#2822382 Свойство
$modules
теперьprotected
для всех классов расширяющихBrowserTestBase
иKernelTestBase
. -
#3127455 Для
BlockCreationTrait::placeBlock
исправлено описание параметраid
. -
#3126564 Использование
::assertArraySubset
прекращено, так как он устарел. Вместо него используется::assertEquals
в цикле. -
#3117863 Ограничение
Length
теперь (Symfony 5) требует обязательно указыватьallowEmptyString
вместе сmin
параметром. -
#3119710
NodeMigrateTypeTestTrait::getTableName
больше не приводит название таблицы к нижнему регистру, так как это больше не требуется. - #3122547 Исправлены тесты учитывающие исправление #3121362 (Drupal 8.8.6.
-
#3015855 Обращения к
block_content
таблице теперь производятся через Entity API. -
#3126969 Использование
::assertAttributeInstanceOf
прекращено, так как он устарел. Вместо него используется::assertInstanceOf
. -
#3082415 Использование
::assertIdentical
для логических значений заменено на соответствующие::assertTrue
и::assertFalse
. -
#3126563 Использование
::assertAttributeEqual
прекращено, так как он устарел. Вместо него используется::assertEquals
. -
#3126970 Использование
::readAttribute
прекращено, так как он устарел. Вместо него используется::assertEquals
. -
#3126971 Использование
::getObjectAttribute
прекращено, так как он устарел. -
#3128905 Использование
assert*
на экземпляры заменено на::assertInstanceOf()
,::assertNotInstanceOf()
. -
#3128746 Сравнения с использованием
strpos()
заменены на более точные строковые сравнения. - #3131402 Удалены тайпхинты возвращаемых данных для абстрактных классов.
-
#3112641 Удалена старая отсылка на
datetime_range_view_presave()
вEntityTypeWithoutViewsDataTest::testEntityTypeWithoutViewsData()
. - #3117421 Drupal CI больше не будет запускать SimpleTest тесты.
-
#3131817 Использование
is_numberic()
заменено на нативные методы::assertIsNumeric()
,::assertIsNotNumeric()
. -
#3135308 Исправлено использование устаревшего
Symfony\Component\BrowserKit\Response::getStatus()
наgetStatusCode()
. -
#3135302 Удалёны старые тесты для Symfony 3:
ReverseProxyMiddlewareTest::testReverseProxyEnabledLegacy()
,ReverseProxyMiddlewareTest::reverseProxyEnabledProviderLegacy()
. -
#3136389 Тестам что не вызывают устаревший код, удалена группа
@group legacy
. -
#3143235 Использование
::expectExceptionMessageRegExp()
заменено на::expectExceptionMessageMatches()
. -
#3139402 Использование
::assertIdenticalObject()
заменено на$this->assertEquals()
. -
#3139421 Использование
::assertOption()
и::assertNoOption()
заменены на$this->assertSession()->optionExists()
.
¶Прочие изменения
- #3089166 Минимальная версия PHP 7.2.3, рекомендуемая — 7.3.
- #3088712 Drupal ядро теперь запрашивает Symfony 4.4.
- #3089508 Полифилы (html5shiv, matchMEdia, domready, classList) — удалены.
- #3095199 Twig обновлён до 2.х версии.
-
#2955931 Зависимость
easyrdf/easyrdf
перенесена вrequire-dev
. -
#3096454 Функция
twig_without()
— удалена. -
#3111612 Параметр
Connection
для Select query builder теперь находится на первой позиции. Было:public function __construct($table, $alias, Connection $connection, $options = []) {}
, стало:public function __construct(Connection $connection, $table, $alias = NULL, $options = []) {}
. - #3113653 PHPUnit обновлён до 8 версии. Изменения в тестах пока не требуются, но в планах стоит обновление до PHPUnit 9 которое повлечёт за собой изменения.
- #3116384 В Drupal 8 можно было добавлять дополнительные загрузчики, для того чтобы включить поддержку APCu. Эта возможность была удалена в пользу загрузчика Composer.
- #3116297 Symfony 4 больше не поставляет WinCache, таким образом в Drupal 9 он также будет отсутствовать. Рекомендуется использовать APCu как замену.
-
#3104265 Doctrine разделил на части пакет
doctrine/common
. Drupal не использует все данные пакеты, таким образом зависимости обновлены и были удалены из зависимостей:doctrine/cache
,doctrine/collections
,doctrine/common
,doctrine/inflector
. -
#3084472 Трейт
DeprecatedModulesTestTrait
удалён. - #3109534 Минимальная версия MySQL увеличена до 5.7.8
- #3120124 Минимальная версия MariaDB увеличена до 10.2.7.
- #3107155 Минимальная версия SQLite увеличена до 3.26.
-
#3074585 Сервисы
app.root
иsite.path
заменены на параметры. -
#3118079
postcss-header
обновлён до 2.0.0 и убрано временное решение для корректной работы. - #3114079 Минимальная версия Apache увеличена до 2.4.7.
-
#2846994 Минимальная версия PostgreSQL увеличена до 10, также теперь требуется расширение
pg_trgm
. - #3087130 Конфигурации установочных профилей теперь могут зависеть от опциональных конфигураций модулей.
-
#3117558 Git hash для ядра 9.0.x в
composer.lock
исправлен на актуальный. -
#3043471 Drupal теперь использует PSR-17 фабрики для создания PSR-7
Request
иResponse
. - #3119017 Улучшена проверка версии драйвера баз данных для поддержки различных суфиксов в названии (докер билды).
- #3117342 Все зависимости были обновлены.
-
#3121024 Удалён
@todo
дляThemeInstaller::uninstall
. - #3123558 Компоненты Symfony обновлены до 4.4.7.
-
#3113876 Использование
GetResponseForExceptionEvent
заменено наExceptionEvent
. - #3123326 Удалены проверки и пометка о конфлитке с pathauto. Для Drupal 9 нету версий модуля которые несовместимы с ним.
-
#3032605
Drupal\Component\DependencyInjection\Container
теперь реализуетResetInterface
. -
#3127641 Исправлена опечатка в вызове исключения
BadRequestHttpException
вResourceIdentifierNormalizer
. -
#3117858 Прекращено использование
Symfony\Component\Process\Process::inheritEnvironmentVariables
, так как метод устарел, а начиная с Symfony 4.4 значения наследуются по умолчанию. - #3127674 Обновлены Composer зависимости.
-
#3117869 Передача аргумента в
Symfony\Component\HttpFoundation\Request::isMethodSafe
помечена устаревшей с Symfony 4.4. Внесены соответствующие изменения в ядро. -
#3125234
ProxyBuilder
обновлён для соответствия Symfony 5. -
#3117857 Начиная с Symfony 4.4
Symfony\Component\Debug\BufferingLogger
является устаревшим и вместо него теперь используетсяSymfony\Component\ErrorHandler\BufferingLogger
. -
#3129508 Множественные последовательные вызовы
dir()
заменены на число в качестве 2 аргумента. -
#3094454 Включена проверка стандартов
@deprecated
которые должны содержать ссылку на изменения. - #3093173 Для jQuery UI форка добавлен README.
- #3094398 События для Symfony запросов и ответов обновлены в соответствии с изменениями.
-
#3130341 Удалён метод
Drupal\Core\Update\UpdateKernel::fixSerializedExtensionObjects()
. -
#3123537 Страница о статусе сайта не будет показывать WSOD если оно нашло расширение без
core_version_requirement
, вместо этого будет показано сообщение о проблеме. -
#2821499 Включена проверка
DrupalPractice.InfoFiles.NamespacedDependency
. Расширения должны указывать свои зависимости в формате{project}:{module}
. -
#2937513 Исправлены несоответствия стандарту кодирования
Drupal.Commenting.DocComment.TagGroupSpacing
в ядре. - #3138721 Исправлены опечатки в слове «neccessary».
¶Ссылки
- Drupal 9.0.0 (англ.), drupal.org, 4 июня 2020