03.10.21 - 11:16 23 просмотра

Не добавляется материал при обновлении с Drupal 8 на Drupal 9

После обновления до Drupal 9 при попытке создать материал стала появляться ошибка:

Error: Call to a member function getAccountName() on null в Drupal\node\NodeForm->form() (строка 155

Насколько я понял, связано это с устаревшим классом, на смену которого пришёл ::getDefaultEntityOwner. Удалось эту ошибку убрать путём изменения ядра самого Drupal. Также рекомендуют менять конфигурацию (Этот комментарий). Можно изменит ядро, но это кривой способ. Лучше всего изменить конфигурации core.base_field_override.node.NODETYPE.uid.yml , в которых есть устаревший класс вывода автора ноды.

Патч для устранения ошибки и возможности заново заводить ноды:

diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index a90a5a723f..173a047f21 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -152,7 +152,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['meta']['author'] = [
       '#type' => 'item',
       '#title' => $this->t('Author'),
-      '#markup' => $node->getOwner()->getAccountName(),
+      '#markup' => !$node->isNew() ? $node->getOwner()->getAccountName() : \Drupal::currentUser()->getAccountName(),
       '#wrapper_attributes' => ['class' => ['entity-meta__author']],
     ];

 

Restricted HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.