Este de fapt foarte ușor, cu excepția eliminării tuturor referințelor la canonic din codul standard de care aveam nevoie doar să suprascriu o singură funcție adresă URL
în clasa mea de entitate personalizată:
src/Entity/MyContentEntity.php
/**
* Definește clasa de entitate chunk.
* Rețineți că lipsește intrarea „links = { canonical }” din adnotare
*
*
* @ContentEntityType(
* id = „bucătură”,
*...
* linkuri = {
* "add-form" = "/admin/content/chunk/add/{chunk_type}",
* "add-page" = "/admin/content/chunk/add",
* "edit-form" = "/admin/content/chunk/{chunk}/edit",
* "delete-form" = "/admin/content/chunk/{chunk}/delete",
* „colecție” = „/admin/content/chunk”
*},
*...
* )
*/
clasa Chunk extinde ContentEntityBase implementează ChunkInterface {
/**
* acest lucru previne WSOD atunci când modulele terțe apelează $entity->toUrl
*/
funcția publică toUrl($rel = 'canonic', matrice $opțiuni = []) {
if ($rel == 'canonic') {
return Url::fromUri('route:<nolink>')->setOptions($options);
}
else {
return parent::toUrl($rel, $opțiuni);
}
}
}
Celelalte lucruri de aici sunt necesare numai dacă entitatea se bazează pe un cod standard generat automat de la drush genera
sau asemănător:
src/Form/MyContentEntityForm.php
/**
* Următoarea modificare este necesară numai dacă utilizați codul standard de la „drush generate” sau similar
*/
clasa ChunkForm extinde ContentEntityForm {
funcția publică salvare (matrice $form, FormStateInterface $form_state) {
...
// schimbă următoarea linie
//$form_state->setRedirect('entity.chunk.canonical', ['chunk' => $entity->id()]);
// la ceva la alegerea ta
$form_state->setRedirect('entity.chunk.edit-form', ['chunk' => $entity->id()]);
}
}
my_module.links.task.yml
:
# Dacă există, eliminați următorul cod boilerplate din „drush generate” sau similar
entity.chunk.view:
titlu: Vedere
nume_rută: entity.chunk.canonical
rută_de bază: entity.chunk.canonical