В настоящее время я работаю с Drupal 8 API , и мне нужно сохранить в базе данных мой тип menu_link_content . Для этого у меня есть хук на entity_presave & entity_predelete . Поскольку я не хочу терять синхронизацию между базой данных и Drupal, когда мой код получил ошибку, я не позволяю Drupal сохранить сущность. Именно поэтому я подсел предварительно, а не сохранить. в любом случае ...
function modulename_entity_presave(\Drupal\Core\Entity\EntityInterface $entity) : void
{
$class = get_class($entity);
if ($entity->isNew()) {
switch ($class) {
case 'Drupal\menu_link_content\Entity\MenuLinkContent':
//dispatch event menu link content insert
//listener on that event that insert the entity in DB
break;
}
}
if (isset($entity->original)) {
switch ($class) {
case 'Drupal\menu_link_content\Entity\MenuLinkContent':
//dispatch event menu link content update <- this one triggered
//listener on that event that update the entity in DB
break;
}
}
}
Моя проблема в том, что когда я удаляю перевод моего menu_link_content (или любого другого типа), запускается событие «presave», и langcode объекта изменяется с переведенного langcode (например, «fr») на langcode по умолчанию (например, 'en'), а затем срабатывает ловушка entity_translation_delete .
function modulename_entity_translation_delete(\Drupal\Core\Entity\EntityInterface $translation)
{
$class = get_class($translation);
switch ($class) {
case 'Drupal\menu_link_content\Entity\MenuLinkContent':
// get the langcode && the uuid of the $translation entity
// deleting the row from database using langcode && uuid as key
break;
}
}
Поэтому, когда я запрашиваю свою базу данных с переведенным langcode (например, 'fr'), я ничего не получаю ... так как строка уже обновлена. Поэтому я не могу удалить его из моей базы данных
Я думаю о способе перехвата, если во время обновления изменяется langcode объекта, чтобы вызвать функцию удаления (так как я думаю, что lancode объекта не может быть изменен, единственный раз, когда я видел это, это когда Я удалил перевод). Но я не думаю, что это лучший способ сделать это .. Есть ли какой-нибудь hook_entity_translation_predelete ?
Список хуков Drupal ничего не отображается
Код из modulename_entity_translation_delete работает хорошо, если я не обновляю строку в БД (комментируя строку обновления)
Спасибо за вашу помощь!