Puncte:2

Lipsește pachetul pentru nodul tip entitate după actualizare

drapel ph

Am actualizat recent un sandbox local la Drupal core 9.2.4. În timp ce testam lucrurile, am primit o eroare când încercam să adaug un conținut nou articol din /node/add/article.

Jurnalul arată următorul mesaj.

Drupal\Core\Entity\EntityStorageException: Lipsește pachetul pentru nodul tip entitate din Drupal\Core\Entity\ContentEntityStorageBase->doCreate() (linia 97 din /var/www/drupal9sandbox/docroot/core/lib/Drupal/Core/Entity/ ContentEntityStorageBase.php).

Singura modificare pe care am făcut-o înainte de aceasta este cea din fișierul article.routing.yml. A trebuit să folosesc _entity_form: „node.default” în loc de Drupal\node\Controller\NodeController::add() deoarece acest lucru este depreciat în Drupal 9, așa cum este raportat în Metoda NodeController::add() este depreciată.

Acesta este conținutul complet al articole.routing.yml fişier.

În afară de mica schimbare la _entity_form: „node.default”, nu m-am atins de nimic altceva.

custom_articles.add_content:
  cale: „/nod/add/article”
  implicite:
    _entity_form: „node.default”
    _title_callback: „\Drupal\node\Controller\NodeController::addPageTitle”
    node_type: „articol”
  cerinte:
    _node_add_access: „node:articol”
  Opțiuni:
    _ruta_de_operare_nod: ADEVĂRAT
    parametri:
      tip_nod:
        with_config_overrides: TRUE

Nu sunt sigur unde ar fi definit tipul pachetului, dar acest tip de conținut funcționa bine pe Drupal 8.9.16.

apaderno avatar
drapel us
Ca o notă secundară, dacă *Articol* este un tip de conținut definit pe site, nu trebuie să definiți o rută pentru acesta: Modulul Node se va ocupa de asta. De fapt, are o rută pentru */node/add/{node_type}*, care este valabilă pentru fiecare tip de conținut pe care îl are site-ul.
drapel cn
Există vreun motiv pentru care redeclari o rută existentă? Ce se întâmplă dacă ștergeți acea rută personalizată și ștergeți memoria cache?
apaderno avatar
drapel us
Pentru a confirma comentariul @Clive, profilul de instalare *Standard* folosit din Drupal 9 (dar și versiunile anterioare Drupal) adaugă deja un tip de conținut *Articol*. Dacă Drupal este instalat folosind un alt profil de instalare, *Article* nu ar putea fi un tip de conținut predefinit, dar totuși nu este nevoie să adăugați o rută personalizată atunci când modulul Node s-ar ocupa de el.
drapel ph
@Clive, traseul era deja acolo înainte. Singura modificare pe care am făcut-o a fost la valorile implicite. În loc de `_entity_form: 'node.default'`, folosea `controller:'Drupal\node\Controller\NodeController::add()''. Cu toate acestea, acest lucru a fost depreciat în Drupal 9.
drapel cn
Dacă nu aveți un motiv foarte bun pentru a crea o rută personalizată pentru o cale care există deja și este controlată de sistem, ar trebui să eliminați acel cod. În caz contrar, va trebui să-l mențineți în linie cu actualizările de bază, fără niciun beneficiu. Orice ați putea face pe traseul re-declarat, puteți face „corespunzător” printr-o altă metodă
drapel ph
@Clive, tocmai l-am eliminat și a funcționat! Conform acestui [changelog](https://www.drupal.org/node/3084856) Controlerul Add() a fost eliminat din Drupal 9 și este acum gestionat de `_entity_form. Nu a specificat ce să folosească în schimb, așa că bănuiesc că au vrut să implice doar să eliminați controlerul Add() dacă îl utilizați.
drapel cn
În cazul în care acest lucru nu este ceea ce ați vrut să spuneți, ar trebui să eliminați întreaga declarație de rută IMO. Este inutil și ți-ar putea provoca mai multe dureri de cap în viitor. Cine a scris asta probabil că a avut o înțelegere excelentă a API-ului Symfony, dar poate o înțelegere mai mică a API-ului Drupal
drapel ph
Acesta a fost construit devreme, când am migrat la Drupal. Deci, cred că l-au scris pe baza șablonului standard disponibil înainte. Toate tipurile de conținut care au fost create nu au toate acestea. deci soluția a fost eliminarea blocului de adăugare din fișierul routing.yml. Cum accept răspunsul tău?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.