Jak utworzyć niestandardową jednostkę w Drupal 8 [zamknięty]

10

Mam duży osobisty projekt oparty na Drupal 7, który ma wiele niestandardowych elementów. Chcę rozpocząć aktualizację projektu do Drupal 8, ale całkowicie przeprojektowany rdzeń Drupal 8 jest zbyt duży, żebym mógł sobie poradzić bez dokumentacji (+ Symfony jest dla mnie całkowicie nieznany, jestem zwykłym facetem wyłącznie Drupala) .

Próbowałem utworzyć niestandardową jednostkę, patrząc tylko na niektóre z podstawowych modułów, ale bez powodzenia.

Czy możesz wskazać mi kilka artykułów o niestandardowych bytach w Drupal 8 (nie udało mi się znaleźć jednego) lub podać mi podstawowy przewodnik krok po kroku?

Dzięki.


źródło
1
Czy mógłbyś edytować pytanie, aby dodać trochę o tym, jak daleko zaszedłeś i gdzie dokładnie walczysz? Idealnie byłoby zobaczyć konkretny kod, z którym masz problemy. Zbudowanie niestandardowej encji nie jest małym zadaniem - jest to prawdopodobnie zbyt szerokie pytanie, zarówno dotyczące formatu witryny, jak i szans na uzyskanie dobrej odpowiedzi. Należy pamiętać, że prośby o linki / samouczki są tutaj szczególnie nie na temat z tego powodu. Lepiej rozbić go kawałek po kawałku i zadawać pytania na temat tych małych kawałków. Dzięki
Clive
Nawiasem mówiąc, jeśli nie znasz Symfony, prawdopodobnie trudno będzie ci zastosować swoją wiedzę na temat D7 do D8. Sytuacja uległa znacznej zmianie (jak jestem pewien, że już wiesz). Zdecydowanie polecam przeczytanie jak największej części książki Symfony przed wyruszeniem w podróż; takie uziemienie sprawi, że przejście będzie znacznie płynniejsze, zaufaj mi. Poza tym uznałem, że podmioty kategorii i wiadomości w głównym module Kontakt są bardzo dobrymi punktami wyjścia do nauki
Clive
@Clive Oprócz API do sprawdzania poprawności, interfejs API Entity w Drupal 8 prawie nie ma nic wspólnego z Symfony, więc nie sądzę, żeby to było tak istotne. W przeciwnym razie zgadzam się z tym, że pytanie jest zbyt ogólne, ale starałem się przedstawić ogólny zarys, na bardziej szczegółowe pytania można następnie odpowiedzieć bardziej szczegółowo. I pomaga mieć punkt wyjścia, ponieważ nie jest to zbyt oczywiste, jeśli nie znasz D8.
Berdir
@Berdir Miałem ogólnie na myśli D7 -> D8, a nie konkretnie dla podmiotów. Na przykład znajomość routingu i usług Symfony znacznie ułatwia zrozumienie kodu podstawowego. Nawiasem mówiąc, świetny napis, nie ma powodu, aby nawet myśleć o zamknięciu tego pytania teraz IMO, jest to cenny zasób (nawet jeśli jest to odrobina z boku)
Clive

Odpowiedzi:

13

Pracuję nad dokumentacją API Entity tutaj: https://drupal.org/developing/api/entity .

Pytanie jest zbyt duże, aby udzielić szczegółowej odpowiedzi i zależy od tego, czy potrzebujesz treści, czy elementów konfiguracji. Zakładając, że chcesz encji treści (przechowywanych w bazie danych, może być zmienna / zmienna / ..., szczegóły w powyższym linku), musisz zrobić coś takiego, powyższa dokumentacja ostatecznie obejmie każdy krok, w tym samouczki, teraz , obejmuje tylko pierwsze kroki.

  1. Podaj klasę encji i dodaj niezbędne adnotacje, aby ujawnić ją jako encję.
  2. Podaj niezbędne tabele, nie musisz dużo zmieniać, jeśli masz już schemat 7.x, ale chcesz dodać kolumnę UUID i prawdopodobnie kod języka, jeśli twoja jednostka może mieć język / może być przetłumaczona. Zobacz przykład węzła połączony w kroku, jeśli chcesz, aby niektóre pola podstawowe (właściwości) były przetłumaczalne lub poprawialne, obecnie musisz samodzielnie dostarczyć niezbędne tabele.
  3. Podaj podstawowe definicje pól w metodzie baseFieldDefinitions (). . Zauważ, że sposób, w jaki to działa, zmieni się w https://drupal.org/node/2047229 (od tablic do klas).
  4. Zaimplementuj niezbędne metody pre / post Save / load / Delete, jeśli masz niestandardową logikę, która musi się wydarzyć, np. Przed zapisaniem encji (np. Aktualizacja zmienionego znacznika czasu).
  5. Zaimplementuj kontroler dostępu, jeśli masz nieistotną logikę dostępu, i zastąp metody checkAccess () i checkCreateAccess () lub określ uprawnienie admin w adnotacji, jeśli masz tylko jedno pozwolenie, które pozwala na pełny dostęp.
  6. Zaleca się, choć nie jest to technicznie wymagane, zapewnienie interfejsu dla klasy encji (np. NodeInterface for Node), który zawiera użyteczne (zwykle get / set / isSomething ()) pola podstawowe, dzięki czemu można wpisać podpowiedź w interfejsie i uzyskać automatyczne uzupełnianie dla tych metod.

W zależności od tego, czego potrzebujesz, będą również dalsze kroki, takie jak zdefiniowanie niezbędnych formularzy, być może kontrolera renderowania itd., Ale prawdopodobnie powinny to być osobne pytania, jeśli potrzebujesz więcej informacji.

Uwagi:

  • Encje konfiguracji są w zasadzie podobne, z tym wyjątkiem, że musisz użyć kontrolera pamięci konfiguracji ( https://drupal.org/node/2119905 to ułatwi), nie musisz definiować schematów tabel (oczywiście), ale musisz podać plik schematu konfiguracji, patrz np. słowniki taksonomii lub typy węzłów.
  • Podmioty treści nie mają swoich pól podstawowych zdefiniowanych jako właściwości publiczne lub chronione, zamiast tego są one automatycznie zarządzane w wartościach i właściwościach pól. Uzyskaj do nich dostęp poprzez get () / set () lub odpowiednie magiczne metody. ($ node-> title jest równe $ node-> get ('title')).
  • Pomoc w dokumentacji byłaby bardzo mile widziana. Stworzyłem podstawowy zarys zawartości / struktury, którą chciałbym mieć, więc po prostu stwórz nową stronę i zacznij na przykład. Jestem również zainteresowany uproszczonymi samouczkami, dla encji konfiguracyjnych, jest tu już jeden, który ja gdy będzie gotowy, przejdzie do dokumentacji encji: https://drupal.org/node/1809494
  • Rdzeń ma dość dużą liczbę implementacji encji treści, jeśli chcesz zobaczyć działające przykłady: Węzeł, Użytkownik, Termin, Komentarz, CustomBlock, ... jak wyjaśnia artykuł w kroku 1, zawsze możesz znaleźć typy encji dostarczone przez moduł w przestrzeni nazw encji.
  • @fago właśnie przedstawił prezentację na temat API Entity na DrupalCamp Vienna w ten weekend, obejmuje wiele tego, co tu napisałem i wiele więcej.
Berdir
źródło
1
generator kodu drupal jest bardzo przydatny - >> github.com/Chi-teck/drupal-code-generator
rémy
1
drupalconsole.com - także dobry pomocnik (narzędzie do generowania kodu bitu, interakcji z
Drupalem