Folosind obiectul returnat de Drupal::entityDefinitionUpdateManager()
este modalitatea corectă de a actualiza câmpurile unei entități, din același motiv și hook_update_N()
implementarea nu va chema niciunul hook_schema()
implementare pentru a actualiza un câmp de bază de date.
Imaginați-vă că mai târziu modificați entitatea și redenumiți câmpul respectiv revizuire_traducere_afectată la traducere_afectată. Dacă hook-ul de actualizare pe care l-ați scris acum folosește matricea din care a revenit baseFieldDefinitions()
și o stochează în $câmpuri
, nu va găsi nicio valoare pentru câmpuri['revision_translation_affected']
, de cand baseFieldDefinitions()
a fost deja actualizat pentru a returna câmpul redenumit.
Implementările cârligului de actualizare trebuie să funcționeze independent de a fi ultimul cârlig de actualizare adăugat sau nu.
În plus, codul folosit dintr-un cârlig de actualizare nu poate fi schimbat, odată ce acel cârlig a fost adăugat. Dacă un cârlig de actualizare creează un câmp de entitate care este eliminat ulterior (de exemplu), trebuie adăugat un nou cârlig de actualizare pentru a elimina acel câmp de entitate; cârligul de actualizare existent nu poate fi modificat pentru a nu mai adăuga acel câmp de entitate, sau site-urile care rulează deja acel cârlig de actualizare nu vor vedea câmpul de entitate eliminat. (Drupal rulează un cârlig de actualizare o singură dată.)