На самом деле это очень просто, за исключением удаления всех ссылок на канонический код из шаблонного кода, который мне просто нужно было переопределить одной единственной функцией. toUrl
в моем пользовательском классе сущностей:
src/Entity/MyContentEntity.php
/**
* Определяет класс сущности чанка.
* Обратите внимание на отсутствующую запись «links = {canonical}» в аннотации.
*
*
* @ContentEntityType(
* id = "кусок",
* ...
* ссылки = {
* "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",
* "коллекция" = "/admin/content/chunk"
* },
* ...
* )
*/
класс Chunk расширяет ContentEntityBase, реализует ChunkInterface {
/**
* это предотвращает WSOD, когда сторонние модули вызывают $entity->toUrl
*/
публичная функция toUrl($rel = 'canonical', массив $options = []) {
если ($rel == 'канонический') {
return Url::fromUri('route:<nolink>')->setOptions($options);
}
еще {
вернуть parent::toUrl($rel, $options);
}
}
}
Прочее здесь необходимо только в том случае, если сущность основана на автоматически сгенерированном шаблонном коде из генерировать драш
или похожие:
источник/Форма/MyContentEntityForm.php
/**
* Следующее изменение необходимо только в том случае, если вы используете шаблонный код из «drush generate» или аналогичный
*/
класс ChunkForm расширяет ContentEntityForm {
общественная функция сохранения (массив $ form, FormStateInterface $ form_state) {
...
// изменить следующую строку
//$form_state->setRedirect('entity.chunk.canonical', ['chunk' => $entity->id()]);
// на что-то по вашему выбору
$form_state->setRedirect('entity.chunk.edit-form', ['chunk' => $entity->id()]);
}
}
my_module.links.task.yml
:
# Если существует, удалите следующий шаблонный код из "drush generate" или аналогичного
entity.chunk.view:
Название: Посмотреть
route_name: entity.chunk.canonical
base_route: entity.chunk.canonical