Я пытаюсь написать команду drush для повторного сохранения всех узлов на моем сайте.
Я искал модуль и нашел Пересохранить все узлы модуль, но его команда drush еще не готова. Поэтому я решил попробовать написать его сам.
Однако я не могу заставить свои узлы пересохраняться с помощью $ сущность-> сохранить ()
, и я не понимаю, почему.
<?php
пространство имен Drupal\resave_all_nodes\Commands;
используйте Drupal\Core\Entity\EntityTypeManagerInterface;
используйте Drupal\node\Entity\Node;
используйте Drush\Commands\DrushCommands;
/**
* Класс команды Drush для преобразования модуля Resave All Nodes.
*/
класс ResaveAllNodesCommands расширяет DrushCommands
{
/**
* Менеджер типов объектов.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
частный $entityTypeManager;
/**
* Создает объект ResaveAllNodesCommands.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Менеджер типов объектов.
*/
общедоступная функция __construct (EntityTypeManagerInterface $entity_type_manager)
{
$this->entityTypeManager = $entity_type_manager;
родитель::__construct();
}
/**
* Пересохраните все узлы.
*
* @command resave-all-nodes:resave
*
* @usage drush resave-all-nodes:resave
* Пересохранить все узлы на сайте.
*
* @псевдонимы побежали
*/
публичная функция resaveAllNodes()
{
$my_node = Node::load(1);
$my_node->сохранить();
\Drupal::logger('resave_all_nodes')->notice("узел 1 сохранен!");
}
}
Когда я запускаю команду, в журналах отображаются уведомления регистратора:
- Я вижу "узел 1 сохранен!" в журналах
- У меня есть другое сообщение в журнале
hook_entity_presave()
, который также появляется
Но, когда я иду в /админ/контент
, «дата обновления» для узла 1 не изменилась. Также содержимое узла не сохраняется повторно.
Если я пойду в узел/1/редактировать
и повторно сохранить вручную, узел повторно сохраняется, как я и ожидал (обновляется обновленная дата и обновляются значения полей).
Итак, почему узел-> сохранить()
молча терпит неудачу (дата обновления и значения полей остаются прежними), при сохранении вручную работает?
У меня есть несколько пользовательских модулей, я отключил их и пересобрал кеш, но проблема осталась.