Comment créer une entité personnalisée dans Drupal 8 [fermé]

10

J'ai un grand projet personnel basé sur Drupal 7 qui a de nombreuses entités personnalisées. Je veux commencer la mise à niveau du projet vers Drupal 8 mais le noyau Drupal 8 complètement réécrit est trop gros pour que je puisse me débrouiller sans aucune documentation (+ Symfony m'est totalement inconnu, je ne suis qu'un simple gars Drupal uniquement) .

J'ai essayé de créer une entité personnalisée en regardant simplement le code des modules principaux, mais sans succès.

Pouvez-vous m'indiquer quelques articles sur les entités personnalisées dans Drupal 8 (je n'ai pas pu en trouver une seule) ou me donner un guide de base étape par étape?

Merci.


la source
1
Pourriez-vous modifier la question pour ajouter un peu sur la distance que vous avez parcourue et sur l'endroit exact où vous vous débattez? Il serait idéal de voir le code spécifique avec lequel vous rencontrez des problèmes. Construire une entité personnalisée n'est pas une mince tâche - c'est probablement une question trop large, à la fois pour le format du site et pour vos chances d'obtenir une bonne réponse. Veuillez garder à l'esprit que les demandes de liens / tutoriels sont spécifiquement hors sujet ici pour cette raison. Mieux vaut le décomposer morceau par morceau, et poser des questions sur ces petits morceaux. Merci
Clive
Soit dit en passant, si vous ne connaissez pas Symfony, vous aurez probablement du mal à appliquer vos connaissances D7 à D8. Les choses ont bien changé (comme vous le savez sûrement déjà). Je vous recommande fortement de lire autant de livres Symfony que possible avant de vous lancer dans votre voyage; avoir ce genre de mise à la terre rendra la transition beaucoup plus douce, croyez-moi. En tant qu'autre côté, j'ai trouvé que les entités Catégorie et Message dans le module de contact de base étaient de très bons points de départ pour l'apprentissage
Clive
@Clive En dehors de l'API de validation, l'API Entity dans Drupal 8 n'a presque rien à voir avec Symfony, donc je ne pense pas que ce soit si pertinent. Sinon, je suis d'accord avec le fait que la question est trop large, mais j'ai essayé de donner un aperçu, des questions plus spécifiques peuvent alors recevoir des réponses plus détaillées. Et cela aide d'avoir un point de départ, car ce n'est pas trop évident si vous ne connaissez pas D8.
Berdir
@Berdir Je voulais dire D7 -> D8 en général, pas pour les entités en particulier. Connaître le routage et les services Symfony, par exemple, facilite la compréhension du code principal en général. Une excellente rédaction d'ailleurs, aucune raison de penser à fermer cette question maintenant OMI, c'est une ressource précieuse (même si c'est un peu large)
Clive

Réponses:

13

Je travaille sur la documentation de l'API d'entité ici: https://drupal.org/developing/api/entity .

La question est trop grande pour répondre en détail et cela dépend si vous avez besoin de contenu ou d'entités de configuration. En supposant que vous vouliez des entités de contenu (stockées dans la base de données, peuvent être modifiables / révisables / ..., détails dans le lien ci-dessus), vous devez faire quelque chose comme ça, la documentation liée ci-dessus couvrira éventuellement chaque étape, y compris les tutoriels, en ce moment , il ne couvre que les premières étapes.

  1. Fournissez une classe d'entité et ajoutez les annotations nécessaires pour l'exposer en tant qu'entité.
  2. Fournissez les tables nécessaires, vous n'avez pas besoin de beaucoup changer si vous avez déjà votre schéma 7.x, mais vous voulez ajouter une colonne uuid et éventuellement langcode si votre entité peut avoir une langue / être traduisible. Voir l'exemple de nœud lié à l'étape si vous souhaitez rendre certains champs de base (propriétés) traduisibles ou révisables, vous devez actuellement fournir les tables nécessaires vous-même.
  3. Fournissez les définitions de champ de base dans votre méthode baseFieldDefinitions (). . Notez que la façon dont cela fonctionne changera dans https://drupal.org/node/2047229 (des tableaux aux classes).
  4. Mettez en œuvre les méthodes de sauvegarde / chargement / suppression pré / post nécessaires si vous avez une logique personnalisée qui doit se produire, par exemple avant de sauvegarder une entité (comme mettre à jour l'horodatage modifié).
  5. Implémentez un contrôleur d'accès si vous avez une logique d'accès non triviale et remplacez les méthodes checkAccess () et checkCreateAccess () ou spécifiez admin_permission dans votre annotation si vous n'avez qu'une seule autorisation qui autorise un accès complet.
  6. Il est recommandé, bien qu'il ne soit pas techniquement requis, de fournir une interface pour votre classe d'entité (par exemple, NodeInterface for Node) qui inclut des méthodes utiles (généralement get / set / isSomething ()) pour vos champs de base, afin que vous puissiez taper hint sur l'interface et obtenir la saisie semi-automatique pour ces méthodes.

Selon ce dont vous avez besoin, il y aura également d'autres étapes, telles que la définition des formulaires nécessaires, éventuellement un contrôleur de rendu, etc., mais celles-ci devraient probablement être des questions distinctes si vous avez besoin de plus d'informations.

Remarques:

  • Les entités de configuration sont fondamentalement similaires, sauf que vous devez utiliser le contrôleur de stockage de configuration ( https://drupal.org/node/2119905 vous facilitera la tâche), vous n'avez pas besoin de définir de schémas de table (évidemment) mais vous devez fournir un fichier de schéma de configuration, voir par exemple ceux des vocabulaires taxonomiques ou des types de nœuds.
  • Les entités de contenu n'ont pas leurs champs de base définis comme des propriétés publiques ou protégées, mais sont plutôt gérés automatiquement dans les propriétés des valeurs et des champs. Accédez-y via get () / set () ou les méthodes magiques correspondantes. ($ node-> title est égal à $ node-> get ('title')).
  • Une aide sur la documentation y serait la bienvenue. J'ai créé un plan de base pour le contenu / la structure que j'aimerais avoir, alors créez simplement une nouvelle page et commencez par exemple, je suis également intéressé par des tutoriels simplifiés, pour les entités de configuration, il y en a déjà un ici que je passera à la documentation de l'entité lorsqu'elle sera prête: https://drupal.org/node/1809494
  • Core a un assez grand nombre d'implémentations d'entités de contenu, si vous voulez voir des exemples de travail: Node, User, Term, Comment, CustomBlock, ... comme l'explique l'article lié à l'étape 1, vous pouvez toujours trouver les types d'entités fournis par un module dans l'espace de noms Entity.
  • @fago vient de faire une présentation sur l'API Entity au DrupalCamp Vienna ce week-end, couvre une grande partie de ce que j'ai écrit ici et plus encore.
Berdir
la source
1
le générateur de code est très utile drupal - >> github.com/Chi-teck/drupal-code-generator
rémy
1
drupalconsole.com - également un bon assistant (Un outil pour générer du code passe-partout, interagir avec et déboguer Drupal.)
milkovsky