Як створити спеціальну сутність у Drupal 8 [закрито]


10

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

Я спробував створити спеціальну сутність, просто переглянувши деякі основні коди модулів, але без успіху.

Чи можете ви вказати мені деякі статті про користувацькі сутності в Drupal 8 (я не зміг знайти жодного) або дати мені якийсь основний покроковий посібник?

Дякую.

entities  8 

1
Чи можете ви відредагувати питання, щоб додати трохи про те, як далеко ви пройшли, і де саме ви боретеся? Ідеально бачити конкретний код, у якого виникають проблеми. Створення власної сутності не є невеликим завданням - це, мабуть, занадто широке запитання, як щодо формату сайту, так і для ваших шансів отримати хорошу відповідь. Будь ласка, майте на увазі, що запити про посилання / навчальні посібники тут спеціально поза темою саме з цієї причини. Краще розбити його по частинах і задати питання про ті маленькі шматочки. Спасибі
Клайв

На відміну від цього, якщо ви не знаєте жодної Symfony, вам, ймовірно, буде складно застосувати свої знання D7 до D8. Речі змінилися досить істотно (як я впевнений, ви вже знаєте). Я настійно рекомендую прочитати якомога більше книги Symfony , перш ніж вирушати у подорож; якщо таке заземлення зробить перехід значно плавнішим, повірте мені. Як інший бік, я виявив, що об'єкти Категорія та Повідомлення в основному модулі контактів є дуже хорошими вихідними пунктами для навчання
Клайв

@Clive Крім API перевірки, API Entity в Drupal 8 майже нічого спільного з Symfony, тому я не думаю, що це так актуально. В іншому випадку погоджуйтеся з тим, що питання є занадто широким, але я намагався дати огляд, тоді можна відповісти на більш конкретні запитання більш детально. І це допомагає мати вихідну точку, оскільки це не надто очевидно, якщо ви не знаєте D8.
Бердір

@Berdir Я мав на увазі D7 -> D8 взагалі, а не для юридичних осіб. Наприклад, знаючи про маршрутизацію та сервіси Symfony, в цілому полегшує розуміння основного коду. Чудова підписка, до речі, немає причин навіть думати про закриття цього питання зараз ІМО, це цінний ресурс (навіть якщо це широка сторона)
Клайв

Відповіді:


13

Я працюю над документацією Entity API тут: https://drupal.org/developing/api/entity .

Питання занадто велике, щоб детально відповісти, і це залежить від того, чи потрібні вам вмісти або конфігураційні сутності. Припустимо, що ви хочете, щоб об'єкти вмісту (які зберігаються в базі даних, можуть бути керуючими / переглядаються / ..., деталі у посиланні вище), вам потрібно зробити щось подібне. Документація, зв'язана вище, врешті-решт охопить кожен крок, включаючи підручники, прямо зараз , він охоплює лише перші кроки.

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

Залежно від того, що вам потрібно, також будуть подальші кроки, такі як визначення необхідних форм, можливо, контролер візуалізації тощо, але це, мабуть, окремі запитання, якщо вам потрібна додаткова інформація.

Примітки:

  • Суб'єкти Config в основному схожі, за винятком того, що вам потрібно використовувати контролер зберігання конфігурацій ( https://drupal.org/node/2119905 це полегшить), вам не потрібно визначати схеми таблиць (очевидно), але вам потрібно надати файл конфігураційної схеми, див., наприклад, файли для таксономічних словників або типів вузлів.
  • Суб'єкти вмісту не мають своїх базових полів, визначених як загальнодоступні або захищені властивості, натомість ними автоматично керують властивості значень та полів. Доступ до них можна отримати через get () / set () або відповідними магічними методами. (заголовок $ node-> дорівнює $ node-> get ('title')).
  • Допомога щодо документації там буде дуже вітається. Я створив базовий контент для вмісту / структури, який я хотів би мати, тому просто створіть нову сторінку і розпочніть роботу, наприклад, мені також цікаво спростити підручники для конфігураційних об'єктів, тут є вже один, який я після готовності перейде до документації на сутність: https://drupal.org/node/1809494
  • У Core є досить велика кількість реалізацій об'єкта вмісту, якщо ви хочете побачити робочі приклади: Node, User, Term, Comment, CustomBlock, ... як пояснюється стаття, пов'язана на кроці 1, ви завжди можете знайти типи сутності, надані модуль в просторі імен Entity.
  • @fago щойно провів презентацію про Entity API у DrupalCamp Vienna у ці вихідні, висвітлює багато того, що я написав тут та багато іншого.

1
генератор drupal коду дуже корисний - >> github.com/Chi-teck/drupal-code-generator
rémy

1
drupalconsole.com - також хороший помічник (Інструмент для генерування кодового коду, взаємодії з Drupal та налагодження його.)
milkovsky
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.