Как расширить базовый пользовательский объект после установки?
Мне нужно создать модуль для обработки профилей пользователей, и мне нужно автоматически расширить базовый объект пользователя Drupal после установки. Для Drupal 7 я нашел способ с помощью:
field_create_field($field);
Но эта функция недоступна в Drupal 8, кстати, совершенно не работает на Drupal, учится во время работы над ним.
2 answers
Поля, как и большинство других вещей, теперь являются конфигурацией (сущностями).
Это означает, что вам не нужно писать код для их создания, вы можете просто создать их в пользовательском интерфейсе, затем экспортировать их через пользовательский интерфейс управления конфигурацией и поместить соответствующие файлы в свою папку config/install
. Drupal автоматически импортирует всю вашу конфигурацию из этой папки.
Обратите внимание, что поле обычно состоит из 4 частей:
- Хранилище полей, файл с именем
field.storage.user.yourfieldname.yml
(или узел, комментарий,...для других типов сущностей). Это определяет соответствующую конфигурацию поля и хранилища. - Поле, файл с именем
field.field.user.user.yourfieldname.yml
(пользователь является особенным, потому что существует только один пакет, для узлов, например, это будет node.article). Это определяет, что поле доступно в определенном пакете и включает конфигурацию, такую как метка. - Отображается одна или несколько форм, например, с именем
core.entity_form_display.user.default.yml
. Пользователь по умолчанию имеет два режима формы: по умолчанию и регистрация. Узел по умолчанию имеет только один. Этот сохраняет конфигурацию виджета для поля. - Один или несколько видов отображения, например
core.entity_view_display.user.default.yml
. Здесь хранится информация о форматировании для определенного режима просмотра.
Первые два файла можно просто скопировать в вашу папку config/install
. Два других немного сложнее, потому что они содержат конфигурацию виджета/средства форматирования для всех полей этого типа сущности, связки и комбинации отображения формы/представления. Таким образом, в случае пользователя, например, вам действительно нужно немного кода, чтобы добавить настройка для отображения существующей формы/представления. См. node_add_body_field() для примера кода. Вы можете получить точные настройки из экспортированных файлов.
Если вы являетесь владельцем пакета, например, если ваш модуль определяет тип узла с числом полей, вы также можете просто добавить эти формы/представления в папку конфигурации.
Вы также можете использовать Консоль Drupal для создания полей. Что требует меньших усилий, чем вышеперечисленное.
- https://hechoendrupal.gitbooks.io/drupal-console/content/en/commands/generate-plugin-field.html
- https://hechoendrupal.gitbooks.io/drupal-console/content/en/commands/generate-plugin-fieldformatter.html
- https://hechoendrupal.gitbooks.io/drupal-console/content/en/commands/generate-plugin-fieldtype.html
- https://hechoendrupal.gitbooks.io/drupal-console/content/en/commands/generate-plugin-fieldwidget.html