Come creare un'entità personalizzata in Drupal 8 [chiuso]


10

Ho un grande progetto personale basato su Drupal 7 che ha molte entità personalizzate. Voglio iniziare ad aggiornare il progetto in Drupal 8 ma il core completamente riscritto di Drupal 8 è troppo grande per me per avere la testa senza alcuna documentazione (+ Symfony è totalmente sconosciuto per me, sono solo un ragazzo solo per Drupal) .

Ho provato a creare un'entità personalizzata semplicemente guardando alcuni dei codici dei moduli principali, ma senza successo.

Puoi indicarmi alcuni articoli sulle entità personalizzate in Drupal 8 (non sono stato in grado di trovarne uno singolo) o darmi una guida passo-passo di base?

Grazie.

entities  8 

1
Potresti modificare la domanda per aggiungere un po 'di quanto sei lontano ed esattamente dove stai lottando? Vedere il codice specifico con cui hai problemi sarebbe l'ideale. Costruire un'entità personalizzata non è un compito piccolo: è probabilmente una domanda troppo ampia, sia per il formato del sito, sia per le tue possibilità di ottenere una buona risposta. Tieni presente che le richieste di link / tutorial sono specificamente fuori tema qui proprio per questo motivo. Meglio scomporlo pezzo per pezzo e porre domande su quei piccoli pezzi. Grazie
Clive

A parte questo, se non conosci Symfony probabilmente troverai difficile applicare le tue conoscenze D7 a D8. Le cose sono cambiate abbastanza sostanzialmente (come sono sicuro che già sai). Consiglio vivamente di leggere il più possibile il libro di Symfony prima di intraprendere il viaggio; avere quel tipo di messa a terra renderà la transizione molto più agevole, fidati di me. Come altro a parte, ho trovato le entità Categoria e Messaggio nel modulo di contatto principale come ottimi punti di partenza per l'apprendimento
Clive

@Clive A parte l'API di validazione ha l'API Entity in Drupal 8 quasi nulla a che fare con Symfony, quindi non credo sia così rilevante. In caso contrario, sono d'accordo sul fatto che la domanda sia troppo ampia, ma ho cercato di fornire una panoramica, a cui è possibile rispondere a domande più specifiche in modo più dettagliato. E aiuta ad avere un punto di partenza, dato che non è troppo ovvio se non conosci D8.
Berdir,

@Berdir intendevo D7 -> D8 in generale, non specificamente per le entità. Conoscere il routing e i servizi di Symfony, ad esempio, rende molto più semplice la comprensione del codice di base in generale. Grande risalto a proposito, nessun motivo per nemmeno pensare di chiudere questa domanda ora IMO, è una risorsa preziosa (anche se è un po 'ampia)
Clive

Risposte:


13

Sto lavorando alla documentazione dell'API Entity qui: https://drupal.org/developing/api/entity .

La domanda è troppo grande per rispondere in dettaglio e dipende dalla necessità di contenuti o di entità di configurazione. Supponendo che si desideri entità di contenuto (archiviate nel database, possono essere fieldable / revisionable / ..., dettagli nel link sopra), è necessario fare qualcosa del genere, la documentazione collegata sopra coprirà alla fine ogni passaggio, inclusi i tutorial, proprio ora , copre solo i primi passi.

  1. Fornire una classe di entità e aggiungere le annotazioni necessarie per esporla come entità.
  2. Fornisci le tabelle necessarie, non devi cambiare molto se hai già il tuo schema 7.x, ma vuoi aggiungere una colonna uuid e possibilmente langcode se la tua entità può avere una lingua / essere traducibile. Vedi l'esempio di nodo collegato nel passaggio se vuoi rendere alcuni campi di base (proprietà) traducibili o revisionabili, al momento devi fornire tu stesso le tabelle necessarie.
  3. Fornire le definizioni dei campi di base nel metodo baseFieldDefinitions (). . Si noti che il modo in cui funziona cambierà in https://drupal.org/node/2047229 (dagli array alle classi).
  4. Implementare i necessari metodi pre / post Salva / carica / Elimina se si dispone di una logica personalizzata che deve verificarsi, ad esempio prima di salvare un'entità (come aggiornare il timestamp modificato).
  5. Implementare un controller di accesso se si dispone di una logica di accesso non banale e sovrascrivere i metodi checkAccess () e checkCreateAccess () o specificare admin_permission nella propria annotazione se si dispone di un'unica autorizzazione che consente l'accesso completo.
  6. Si consiglia, sebbene non sia tecnicamente necessario, di fornire un'interfaccia per la propria classe di entità (ad esempio NodeInterface for Node) che includa metodi utili (di solito get / set / isSomething ()) per i campi di base, in modo da poter digitare un suggerimento sull'interfaccia e ottenere il completamento automatico per questi metodi.

A seconda di ciò di cui hai bisogno, ci saranno anche ulteriori passaggi, come la definizione dei moduli necessari, possibilmente un controller di rendering e così via, ma quelli dovrebbero probabilmente essere domande separate se hai bisogno di maggiori informazioni.

Appunti:

  • Le entità di configurazione sono sostanzialmente simili, tranne per il fatto che è necessario utilizzare il controller di archiviazione di configurazione ( https://drupal.org/node/2119905 renderà tutto più semplice), non è necessario definire schemi di tabella (ovviamente) ma è necessario fornire un file di schema di configurazione, vedere ad esempio quelli per i vocabolari di tassonomia o i tipi di nodo.
  • Le entità di contenuto non hanno i loro campi base definiti come proprietà pubbliche o protette, ma vengono automaticamente gestiti nelle proprietà dei valori e dei campi. Accedili tramite get () / set () o i corrispondenti metodi magici. ($ node-> title è uguale a $ node-> get ('title')).
  • Aiuto sulla documentazione sarebbe molto gradito. Ho creato una struttura di base per il contenuto / la struttura che mi piacerebbe avere, quindi basta creare una nuova pagina e iniziare ad es. Sono anche interessato ad avere tutorial semplificati, per le entità di configurazione, ce n'è già uno qui che passerà alla documentazione dell'entità quando sarà pronto: https://drupal.org/node/1809494
  • Core ha un numero piuttosto elevato di implementazioni di entità di contenuto, se vuoi vedere esempi funzionanti: Nodo, Utente, Termine, Commento, Blocco personalizzato, ... come spiega l'articolo collegato nel passaggio 1, puoi sempre trovare i tipi di entità forniti da un modulo nel namespace Entity.
  • @fago ha appena tenuto una presentazione sull'entità API al DrupalCamp di Vienna questo fine settimana, copre molto di ciò che ho scritto qui e altro ancora.

1
il generatore di codice drupal è abbastanza utile - >> github.com/Chi-teck/drupal-code-generator
rémy

1
drupalconsole.com - anche un buon aiuto (uno strumento per generare codice boilerplate, interagire e debug di Drupal.)
milkovsky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.