De fapt, folosesc D9 pentru a construi un sistem cu entități care folosesc subentități.
Sistemul principal de entități utilizează următoarea cale: /item/{item}
Fiecare subentitate este legată de o entitate principală și folosește această cale: /item/{item}/sub_item/{sub_item}
Deci, pentru a accesa formularul de editare sau ștergere, sunt necesare următoarele căi:
/item/{item}/sub_item/{sub_item}/edit
/item/{item}/sub_item/{sub_item}/delete
De exemplu: /item/1/sub_item/4/edit
Am declarat urmatoarea ruta:
entity.sub_item.edit_form:
cale: „/item/{item}/sub_item/{sub_item}/edit”
implicite:
_entity_form: „sub_item.edit”
_title: „Editați elementul secundar”
Opțiuni:
_admin_route: ADEVĂRAT
parametri:
articol:
tip: entitate: articol
with_config_overrides: TRUE
sub_element:
tip: entitate:sub_item
with_config_overrides: TRUE
cerinte:
_permission: „administrați configurația site-ului”
Linkurile Editare și ștergere sunt generate de generatorul de liste din getOperations. Generatorul de liste se află pe următorul traseu: /item/1/sub_items (aceasta este „colecția” pentru a afișa sub-articolele atașate articolului principal).
Speram că faptul că adresa URL curentă conține element/{item} poate fi reutilizat direct de generatorul de linkuri, dar nu este faptul...
Symfony\Component\Routing\Exception\MissingMandatoryParametersException: Unii parametri obligatorii lipsesc ("articol") pentru a genera o adresă URL pentru ruta "entity.sub_item.edit_form".în Drupal\Core\Routing\UrlGenerator->doGenerate() (linia 181 din /core/lib/Drupal/Core/Routing/UrlGenerator.php).
Am încercat să construiesc o anumită clasă htmlRouteProvider pentru clasa mea de entitate sub-element, dar și în acest caz, rutele sunt construite când memoria cache este șters și nu am acces la elementul din URL pentru a-l seta...
Deci... Întrebarea mea este: îmi lipsește ceva pentru a o face cu ușurință sau trebuie să reimplementez metoda „toUrl()” a clasei mele de entități sub-element pentru a include noul parametru „articol” „din zbor "?
Multumesc anticipat pentru orice sugestie.
PS: este soluția pe care o am de fapt în clasa mea de entitate sub-articol:
funcția publică toUrl($rel = 'canonic', matrice $opțiuni = []) {
$uri = parent::toUrl($rel, $opțiuni);
$uri->setRouteParameter('item', \Drupal::routeMatch()->getRawParameter('item'));
return $uri;
}
Dar poate se poate găsi o soluție mai bună?