Как создать пользовательский объект в Drupal 8 [закрыто]

10

У меня есть большой личный проект, основанный на Drupal 7, который имеет много пользовательских сущностей. Я хочу начать модернизацию проекта до Drupal 8, но полностью переписанное ядро ​​Drupal 8 слишком велико для меня, чтобы я мог думать без какой-либо документации (+ Symfony мне абсолютно неизвестен, я простой парень, работающий только на Drupal) ,

Я попытался создать собственную сущность, просто взглянув на код некоторых основных модулей, но безуспешно.

Можете ли вы указать мне некоторые статьи о пользовательских объектах в Drupal 8 (я не смог найти ни одного) или дать мне простое пошаговое руководство?

Спасибо.


источник
1
Не могли бы вы отредактировать вопрос, чтобы добавить немного о том, как далеко вы продвинулись, и где именно вы боретесь? Видеть конкретный код, с которым у вас проблемы, было бы идеально. Создание пользовательского объекта - это не маленькая задача - это, вероятно, слишком широкий вопрос, как для формата сайта, так и для ваших шансов получить хороший ответ. Пожалуйста, имейте в виду, что запросы на ссылки / учебные пособия здесь не по теме именно по этой причине. Лучше разбить его на кусочки и задать вопросы об этих маленьких кусочках. Спасибо
Клайв
Кроме того, если вы не знаете Symfony, вам, вероятно, будет трудно применить свои знания D7 к D8. Вещи изменились довольно существенно (как я уверен, вы уже знаете). Я настоятельно рекомендую прочитать как можно больше книг о Symfony , прежде чем отправиться в путешествие; такое заземление сделает переход намного более плавным, поверьте мне. Кроме того, я обнаружил, что сущности «Категория» и «Сообщение» в базовом модуле «Контакты» являются очень хорошей отправной точкой для обучения
Клайв
@Clive Помимо API проверки, API-интерфейс Entity API в Drupal 8 практически не имеет ничего общего с Symfony, поэтому я не думаю, что это так актуально. В противном случае согласен с тем, что вопрос слишком широкий, но я попытался дать обзор, на более конкретные вопросы можно было бы ответить более подробно. И это помогает иметь отправную точку, поскольку это не слишком очевидно, если вы не знаете D8.
Бердир
@Berdir Я имел в виду D7 -> D8 в целом, а не для сущностей конкретно. Например, знание маршрутизации и сервисов Symfony значительно упрощает понимание основного кода. Кстати, отличная рецензия, нет оснований даже думать о закрытии этого вопроса сейчас, ИМО, это ценный ресурс (даже если это немного с широкой стороны)
Клайв

Ответы:

13

Я работаю над документацией Entity API здесь: https://drupal.org/developing/api/entity .

Вопрос слишком велик, чтобы ответить на него подробно, и это зависит от того, нужен ли вам контент или конфигурационные объекты. Предполагая, что вы хотите, чтобы объекты содержимого (сохранялись в базе данных, могли быть доступны для полей / ревизии / ..., подробности в ссылке выше), вам нужно сделать что-то вроде этого, документация, связанная выше, в конечном итоге охватит каждый шаг, включая учебные пособия, прямо сейчас , он охватывает только первые шаги.

  1. Укажите класс сущности и добавьте необходимые аннотации, чтобы представить его как сущность.
  2. Предоставьте необходимые таблицы, вам не нужно много менять, если у вас уже есть схема 7.x, но вы хотите добавить столбец uuid и, возможно, langcode, если ваша сущность может иметь язык / быть переводимым. См. Пример узла, связанный в шаге: если вы хотите сделать некоторые базовые поля (свойства) переводимыми или ревизуемыми, вам в настоящее время необходимо предоставить необходимые таблицы самостоятельно.
  3. Укажите определения базового поля в методе baseFieldDefinitions (). , Обратите внимание, что способ работы будет меняться в https://drupal.org/node/2047229 (от массивов к классам).
  4. Реализуйте необходимые методы до / после сохранения / загрузки / удаления, если у вас есть собственная логика, которая должна произойти, например, перед сохранением объекта (например, обновление измененной временной метки).
  5. Реализуйте контроллер доступа, если у вас есть нетривиальная логика доступа, и переопределите методы checkAccess () и checkCreateAccess () или укажите admin_permission в аннотации, если у вас есть только одно разрешение, позволяющее полный доступ.
  6. Рекомендуется, хотя технически не требуется предоставлять интерфейс для вашего класса сущности (например, NodeInterface for Node), который включает в себя полезные (обычно get / set / isSomething ()) методы для ваших базовых полей, чтобы вы могли напечатать подсказку на интерфейсе и получить автозаполнение для этих методов.

В зависимости от того, что вам нужно, будут также дополнительные шаги, такие как определение необходимых форм, возможно, контроллера рендеринга и так далее, но это, вероятно, должны быть отдельные вопросы, если вам нужно больше информации.

Заметки:

  • Конфигурационные сущности в основном похожи, за исключением того, что вам нужно использовать контроллер хранилища настроек ( https://drupal.org/node/2119905 сделает это проще), вам не нужно определять схемы таблиц (очевидно), но вы должны предоставить файл схемы конфигурации, см., например, файлы словаря таксономии или типы узлов.
  • Сущностные объекты не имеют своих базовых полей, определенных как открытые или защищенные свойства, вместо этого они автоматически управляются в свойствах значений и полей. Получите доступ к ним либо через get () / set (), либо через соответствующие магические методы. ($ node-> title равен $ node-> get ('title')).
  • Помощь по документации там будет очень приветствоваться. Я создал базовую схему для содержимого / структуры, которую я хотел бы иметь, поэтому просто создайте новую страницу и начните, например, меня также интересуют упрощенные учебники для объектов конфигурации, здесь уже есть одна, которую я перейдем к документации по объекту, когда будете готовы: https://drupal.org/node/1809494
  • Ядро имеет довольно большое количество реализаций сущности контента, если вы хотите увидеть рабочие примеры: Node, User, Term, Comment, CustomBlock, ... как объясняется в статье, связанной с шагом 1, вы всегда можете найти типы сущностей, предоставленные модуль в пространстве имен сущностей.
  • @fago только что выступил с презентацией об Entity API на DrupalCamp Vienna в эти выходные, рассказывая о многом из того, что я написал здесь и многое другое.
Berdir
источник
1
генератор кода drupal весьма полезен - >> github.com/Chi-teck/drupal-code-generator
rémy
1
drupalconsole.com - также хороший помощник (инструмент для генерации стандартного кода, взаимодействия и отладки Drupal.)
milkovsky