Am o funcție simplă hook_post_update care eșuează cu următoarea eroare:
[notificare] A început actualizarea: ssc_custom_post_update_9001
[eroare] LogicException: contextul de randare este gol, deoarece render() a fost apelat în afara unui apel renderRoot() sau renderPlain(). Utilizare
renderPlain()/renderRoot() sau #lazy_builder/#pre_render în schimb. în
Drupal\Core\Render\Renderer->doRender() (linia 244 din
E:\www\myssc\html\core\lib\Drupal\Core\Render\Renderer.php).
[eroare] Contextul de randare este gol, deoarece render() a fost apelat în afara unui apel renderRoot() sau renderPlain(). Utilizare
renderPlain()/renderRoot() sau #lazy_builder/#pre_render în schimb.
[eroare] Actualizare eșuată: ssc_custom_post_update_9001
În linia 171 ProcessBase.php:
Nu se poate decoda ieșirea în JSON: eroare de sintaxă
[EROARE] [nod] [2022-03-12T04:58:35] LogicException: Redare context
este gol, deoarece render() a fost apelat în afara unui renderRoot() sau
apelul renderPlain(). Utilizați renderPlain()/renderRoot() sau
#lazy_builder/#pre_re nder în schimb. în Drupal\Core\Render\Renderer->doRender() (linia 244 din
E:\www\myssc\html\core\lib\Drupal\C ore\Render\Renderer.php). | uid:
0 | cerere-uri: http://default/ | referiți: | ip: 127.0.0.1 | legătură:
{
„0”: {
„ssc_custom”: {
„9001”: {
„#abort”: {
„succes”: fals,
"query": "Drupal\Core\Entity\EntityStorageException:
Ren der context este gol, deoarece render() a fost apelat în afara a
Apelul renderRoot() sau renderPlain(). Utilizați re nderPlain()/renderRoot()
sau #lazy_builder/#pre_render în schimb. în Drupal\Core\Ent
ity\Sql\SqlContentEntityStorage->save() (linia 810 din E:\www\myssc\html\core\lib\Drupal\Core\Entity\Sql\SqlContentEntityStorage.php)."
}
}
},
„#abandona”: [
„ssc_custom_post_update_9001”
]
},
„drush_batch_process_finished”: adevărat }
Am redus codul la minimum:
utilizați Drupal\Core\Entity\EntityStorageInterface;
utilizați Drupal\Core\Entity\EntityTypeManagerInterface;
utilizați Drupal\node\NodeInterface;
funcția ssc_custom_post_update_9001(&$sandbox) {
/** @var \Drupal\node\NodeStorageInterface $node_storage */
$node_storage = \Drupal::entityTypeManager()->getStorage('nod');
// Câte entități trebuie procesate pe lot.
$limita = 5;
$node_ids = $node_storage->getQuery()
->accessCheck(FALSE)
->condition('tip', 'articol')
->interval(0, $limită)
->execute();
// Încărcați entități.
$noduri = $node_storage->loadMultiple($node_ids);
/** @var \Drupal\node\NodeInterface $nod */
foreach ($noduri ca $nod) {
$nod->setNewRevision();
$nod->salvare();
}
$sandbox['#finished'] = 1;
}
Dacă rulez același cod direct (nu de la drush updb) merge bine. Rularea din meniul de administrare „Run updates”; de asemenea, nu reușește (deci nu este o problemă de drush).
Comentând $node->save() și eroarea nu apare.