Рейтинг:0

Перебирайте пакеты, чтобы создать класс пакетов сущностей для каждого

флаг in

Мне любопытно, есть ли у кого-нибудь способ создать класс пакета сущностей для нескольких пакетов одновременно. Например:

функция MYMODULE_entity_bundle_info_alter(&$bundles) {

  // Мой массив различных типов контента.
  $target_bundles = ['страница', 'статья'];

  // Перебираем типы контента.
  foreach($target_bundle as $bundle) {

    $Bundle = ucfirst($bundle); // страница на страницу
    $bundles['node'][$bundle]['class'] = $Bundle::class; // Страница::класс

  }
}

Проблема, с которой я сталкиваюсь, заключается в том, что $Bundle::класс часть не работает. Это возможно?

Dylan avatar
флаг kr
Я думаю, что у вас неправильные имена классов, я бы отладил возврат для `EntityTypeBundleInfoInterface->getBundleInfo('node);`.и обратитесь к «ContentEntityStorageBase»
user106977 avatar
флаг in
Спасибо, Дилан. Я отредактировал свой пример кода из-за некоторых ошибок. Я получаю сообщение об ошибке: **Неустранимая ошибка:** Невозможно использовать ::class с именем динамического класса. Это заставило меня указать в правильном направлении. Я не понял, что `::class` просто возвращает полное пространство имен класса. Когда я добавил это в конкатенацию строк для переменной $Bundle, все заработало. Я опубликую рабочий код в ответе. Еще раз спасибо!
Рейтинг:1
флаг in

Немного покопавшись, я понял, какую ошибку я получаю:
Фатальная ошибка: Невозможно использовать ::class с именем динамического класса

Короче говоря, моя проблема была в том, что я этого не понимал. ::учебный класс просто возвращает полное пространство имен самого класса. Как только я добавил полное пространство имен в свой $Bundle переменная, все работало хорошо. Приведенный ниже код обеспечивает эффективный способ назначения нескольких пакетов сущностей их соответствующим классам.

функция mymodule_entity_bundle_info_alter(&$bundles) {

  // Массив имен машин типа контента.
  $target_bundles = ['страница', 'статья'];

  // Перебираем типы содержимого.
  foreach($target_bundle as $bundle) {

    // Превратите 'page' в 'Page' и добавьте полное пространство имен.
    $Bundle = 'Drupal\mymodule\Entity\' . ucfirst ($ бандл);

    $bundles['node'][$bundle]['class'] = $Bundle;
  }
} 

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.