Încerc să scriu o comandă drush pentru a salva toate nodurile de pe site-ul meu.
Am căutat un modul și am găsit Salvați din nou toate nodurile modul, dar comanda sa drush nu este încă gata. Așa că am decis să încerc să scriu eu.
Cu toate acestea, nu pot face ca nodurile mele să fie salvate din nou $entity->salvare()
, și nu înțeleg de ce.
<?php
spațiu de nume Drupal\resave_all_nodes\Commands;
utilizați Drupal\Core\Entity\EntityTypeManagerInterface;
utilizați Drupal\node\Entity\Node;
utilizați Drush\Commands\DrushCommands;
/**
* O clasă de comandă Drush pentru conversiile modulului Resave All Nodes.
*/
clasa ResaveAllNodesCommands extinde DrushCommands
{
/**
* Managerul de tip de entitate.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
privat $entityTypeManager;
/**
* Construiește un obiect ResaveAllNodesCommands.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Managerul de tip de entitate.
*/
funcția publică __construct(EntityTypeManagerInterface $entity_type_manager)
{
$this->entityTypeManager = $entity_type_manager;
părinte::__construct();
}
/**
* Resaveți toate nodurile.
*
* @command resave-all-nodes:resave
*
* @usage drush resave-all-nodes:resave
* Resaveți toate nodurile de pe site.
*
* @aliases a alergat
*/
funcția publică resaveAllNodes()
{
$my_node = Nod::load(1);
$nodul_meu->salvare();
\Drupal::logger('resave_all_nodes')->notice("nodul 1 salvat!");
}
}
Când rulez comanda, jurnalele arată notificările loggerului:
- Văd „nodul 1 salvat!” în bușteni
- Am un alt mesaj de logare
hook_entity_presave()
, care apare și
Dar, când merg la /admin/conținut
, „data actualizată” pentru nodul 1 nu s-a schimbat. De asemenea, conținutul nodului nu este ressalvat.
Dacă mă duc la nod/1/edit
și re-salvați manual, nodul este re-salvat așa cum m-aș aștepta (data actualizată este actualizată, iar valorile câmpului sunt actualizate).
Deci, de ce nod->salvare()
eșuează în tăcere (data actualizării și valorile câmpului rămân aceleași), atunci când salvarea manuală funcționează?
Am câteva module personalizate și le-am dezactivat și am reconstruit memoria cache, dar problema rămâne.