Bonjour,

J'aimerai créer un site / app web sous laravel qui permettrait d'accueillir des modules / plugins (comme Wordpress par exemple). Seulement, je ne sais pas du tout comment je pourrais m'y prendre. Comment permettre aux utilisateurs d'ajouter / activer des modules ? Et également, comment permettre à des développeurs de créer des modules ?

Merci ! :)

3 réponses


Hello,

Déjà je pense qu'il faut bien structurer ce que tu souhaite faire, et procéder par étape. A savoir:

  • Définir sur quelles partie de l'application chaque module aura un impact
  • Mettre en place un module en "brut"
  • Faire en sorte qu'un utilisateur puisse activer ou désactiver ce module et qu'en fonction de l'état se module ai un effet
  • Mettre en place une sorte de SDK pour les développeurs, un peu à la manière des paquets Laravel mais avec des possibilités réduites

Après, si je comprend bien, tu voudrais une sorte de clone de Wordpress en Laravel. Si c'est le cas, je déteste être ce gars mais, pourquoi réinventer la roue? Aujourd'hui avec des outils comme Bedrock et ACF le développement Wordpress est presque devenu "fun" (Oui "presque", faut pas abuser non plus). Tu pourrais partir de se modèle déjà existant et ajouter de nouvelles fonctionnalités et possibilités pour donner encore plus de super pouvoirs à Wordpress.

Cryt
Auteur

Hello Segfault !

Merci pour ta réponse. Les modules pourront fonctionner indépendamment mais aussi avoir des effets les uns sur les autres. Par exemple pour rajouter des champs à un formulaire déjà existant, ajouter une entrée de menu, rajouter des fonctionnalités en utilisant la BDD, etc. Les modules pourraient être activés / désactivés comme tu l'as dit, avec un modèle de base. L'app serait installée sur le serveur du client.

C'est pas pour recréer un Wordpress mais tu as raison de poser la question :P

Je sais pas comment organiser le code, ce dont j'aurais besoin et comment ça fonctionne dans les faits. Comment fait Wordpress ?
On définit un dossier pour les modules, des contantes pour savoir quand ils sont activés ? J'imagine que ça doit être bien plus complexe que ça ? :D

D'accord alors si c'est installé sur le serveur du client ça ouvre beaucoup plus de possibilités.

Ce que tu peux faire pour savoir si un module est installer c'est, très naïvement, avoir une table modules avec ta liste de module, et dedans un boolean pour dire si oui ou non le module est activé. C'est pas très glamour, j'en conviens, mais ça fera très bien l'affaire. (Sinon tu peux y stocker dans un fichier de config pour ne pas avoir à faire une requête en plus à la base de donnée à chaque fois, c'est aussi une éventualité intéressante si tu recherche en plus la performance).

Pour wordpress, je suis pas sûr, mais il me semble que c'est le module qui dis à Wordpress "Hé je suis là, éxecute mon code".

Après pour ce qui est de l'organisation du code, le mieux est de considérer que chaque module est un package Laravel (plus d'infos sur la doc) donc avec un ServiceProvider, une config, des migrations, ...
Tu met tout ça dans une gros dossier modules à la racine de ton projet, ensuite chaque module aura son sous dossier avec dedans sa structure (Models, Config, Database, ...)
Ensuite dans ton composer.json tu viens mettre dans la section PSR-4 le lien vers ton dossier module pour qu'il autoload tes modules (Franchement là je te conseil de regarder ce que Laravel et de faire quelques petites recherche sur Google pour mieux comprendre l'histoire du PSR-4. C'est pas compliqué mais là comme ça à froid je serais incapable de l'expliquer) Et 🎉 tada, tu as ton petit système de module indépendant.

Il y a d'autres petits détails encore à voir, notamment pour que chaque module puisse détecté si il est activé où non, mais dans l'ensemble avec ça déjà tu aura un code bien structuré et une bonne base pour travailler efficacement

Ah et aussi tant que j'y pense, ça pourra aussi te permettre de testé tes modules indépendemment. Et ça c'est super cool!

Cryt
Auteur

Wouah merci beaucoup pour ta réponse segfault, c'est très complet ! C'est plus ou moins ce que j'avais en tête mais je ne connaissais pas les packages Laravel et le PSR-4.
Je vais explorer tout ça !

Très bonne journée à toi,