Рейтинг:1

Как сделать пользовательскую сущность доступной для полей?

флаг us

Это было задано здесь раньше; но вопрос закрыт, а несколько ответов не содержат достаточной информации.

Я пытаюсь использовать модуль contrib (sitewide_alert), который предоставляет свой собственный пользовательский объект.Я пытаюсь понять, как пропатчить этот модуль, чтобы сделать его доступным (и как это сделать вообще).

В других сообщениях я видел предложения добавить следующее в аннотацию ContentEntityType:

  • полевой = ИСТИНА;
  • bundle_entity_type = ??
  • field_ui_base_route -> различные предложения, но уже существующие для этого модуля, указывающие на форму конфигурации модуля.

Но ни один из них, похоже, не исправил это.

полная аннотация для объекта:

* @ContentEntityType(
 * id = "общее_предупреждение",
 * label = @Translation("Общесайтовое оповещение"),
 * label_plural = @Translation("Общесайтовые оповещения"),
 * label_collection = @Translation("Общесайтовые оповещения"),
 * обработчики = {
 * "storage" = "Drupal\sitewide_alert\SitewideAlertStorage",
 * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
 * "list_builder" = "Drupal\sitewide_alert\SitewideAlertListBuilder",
 * "views_data" = "Drupal\sitewide_alert\Entity\SitewideAlertViewsData",
 * "translation" = "Drupal\sitewide_alert\SitewideAlertTranslationHandler",
 *
 * "форма" = {
 * "по умолчанию" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "добавить" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "edit" = "Drupal\sitewide_alert\Form\SitewideAlertForm",
 * "удалить" = "Drupal\sitewide_alert\Form\SitewideAlertDeleteForm",
 * },
 * "route_provider" = {
 * "html" = "Drupal\sitewide_alert\SitewideAlertHtmlRouteProvider",
 * },
 * "access" = "Drupal\sitewide_alert\SitewideAlertAccessControlHandler",
 * },
 * base_table = "общее_предупреждение",
 * data_table = "sitewide_alert_field_data",
 * ревизия_таблица = "sitewide_alert_revision",
 * ревизия_data_table = "sitewide_alert_field_revision",
 * show_revision_ui = ИСТИНА,
 * переводимое = ИСТИНА,
 * admin_permission = "администрирование объектов предупреждений на сайте",
 * entity_keys = {
 * "идентификатор" = "идентификатор",
 * "ревизия" = "вид",
 * "метка" = "имя",
 * "uuid" = "uuid",
 * "uid" = "user_id",
 * "код языка" = "код языка",
 * "опубликовано" = "статус",
 * },
 * ревизия_метаданные_ключи = {
 * "revision_user" = "revision_user",
 * "revision_created" = "revision_created",
 * "revision_log_message" = "revision_log",
 * },
 * ссылки = {
 * "канонический" = "/admin/content/sitewide_alert/{sitewide_alert}",
 * "добавить-форма" = "/admin/content/sitewide_alert/добавить",
 * "edit-form" = "/admin/content/sitewide_alert/{sitewide_alert}/edit",
 * "delete-form" = "/admin/content/sitewide_alert/{sitewide_alert}/удалить",
 * "история версий" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions",
 * "revision" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/view",
 * "revision_revert" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/revert",
 * "revision_delete" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/delete",
 * "translation_revert" = "/admin/content/sitewide_alert/{sitewide_alert}/revisions/{sitewide_alert_revision}/revert/{langcode}",
 * "коллекция" = "/admin/content/sitewide_alert",
 * },
 * field_ui_base_route = "sitewide_alert.settings",
 * ограничения = {
 * "ЗапланированнаяДатаПредоставления" = {}
 * }
 * )
 */

В своем подходе проб и ошибок я заметил, что создал пользовательский интерфейс «Управление полями/отображением/и т. д.» для каждого ранее созданного объекта. Итак, я думаю, что это, возможно, связано с отсутствием определенного пакета? Мой вариант использования не требует создания новых пакетов (аналогично сущности пользователя).

Несмотря на другие опубликованные ответы; я предполагаю, что изменения аннотации недостаточно, чтобы добавить эту функциональность.

Рейтинг:1
флаг cn

There is nothing wrong with the entity type annotation. After you have removed this code intentionally disabling the field UI routes

https://git.drupalcode.org/project/sitewide_alert/-/blob/8.x-1.6/src/Routing/RouteSubscriber.php

the entity should be fieldable at admin/content/sitewide_alert/settings/fields.

This is a very cool module. After playing around a little bit I've found out the module has two settings routes, the mentioned dummy form in an odd place under content and the official module settings form in configuration. If you attach the field UI to this form it's easier to find I think:

field_ui_base_route = "sitewide_alert.sitewide_alert_config_form"
liquidcms avatar
флаг us
потрясающе. Я даже не видел, чтобы этот файл маршрута намеренно блокировал доступ пользователя к управлению полями. Я предполагаю, что сопровождающий проекта предполагает, что знает все возможные варианты использования своего модуля. И да, я думаю, перемещение поля ui под формой конфигурации имеет больше смысла. Как сущность пользователя; хотя всегда лично, хотя это было неправильно быть там и должно быть под Структурой. Я также добавлю недостающие ссылки/вкладки и создам патч. Спасибо за вашу помощь.
liquidcms avatar
флаг us
Я предполагаю, что это означает, что преобладающий ответ, который я видел, опубликовал эту аннотацию: «fieldable = true» требуется - не требуется (это не так, как у меня сейчас нет, и все работает, как ожидалось).
4uk4 avatar
флаг cn
Нет, этой аннотации нет в D8/9.Минимальный полевой тип сущности см. в https://drupal.stackexchange.com/questions/283826/how-do-i-add-a-view-mode-to-a-simple-custom-entity.

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

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