L'essentiel de la création de bundles Laravel

Le framework PHP de Laravel offre son système de bundles pour permettre aux développeurs de redistribuer des paquets de code utiles ou d'organiser des applications en plusieurs "bundles" de petites applications..

Dans ce tutoriel, nous allons apprendre les bases de la création et de la distribution de bundles à partir de zéro..

Un ensemble Laravel a accès à toutes les fonctionnalités que l'infrastructure offre à son application hôte, y compris le routage, les migrations, les tests, les vues et de nombreuses autres fonctionnalités utiles..

Voici un petit secret, entre nous: le application Le dossier du paquet source Laravel est également un paquet, que Laravel appelle le DEFAULT_BUNDLE.


Quand créer un paquet?

Avant d'écrire un nouveau morceau de code, j'aime bien me poser quelques questions simples pour déterminer s'il convient à un paquet. Laissez-moi partager cette technique avec vous.

Ce code pourrait-il être utile aux autres?

Si la réponse à cette question est oui, je vérifierais d'abord que quelqu'un n'a pas déjà créé un ensemble ou un package similaire. Hormis à des fins d'apprentissage, il est inutile de recréer la roue. Si l'autre paquet est d'un niveau suffisamment élevé pour être utilisé dans votre projet, utilisez-le plutôt et gagnez du temps..

Deuxièmement, je réfléchis au code et décide si celui-ci pourrait être utile aux utilisateurs d'autres cadres ou à ceux qui ne l'utilisent pas du tout. Si le code n'est pas lié au framework Laravel et n'a pas besoin d'utiliser les classes principales de Laravel, je créerais alors un package Composer. Les packages Composer deviennent largement la norme pour le partage de code qui ne se limite pas à un seul framework ou projet.

Pour plus d'informations sur Composer, reportez-vous aux liens suivants:

  • Documentation officielle
  • Gestion de paquets facile avec Composer

Si le code peut être utile aux autres et qu'il dépend du framework Laravel, vous avez alors une bonne raison de créer un nouvel ensemble..

Dois-je écrire à nouveau ce code?

DRY est le nom du jeu.

Si le code fournit des fonctionnalités que vous écrivez fréquemment, il est judicieux de créer un ensemble. DRY (Ne te répète pas!) Est le nom du jeu.

Ce code pourrait-il être considéré comme une application autonome??

Par exemple, vous pouvez créer un site simple comprenant, entre autres fonctionnalités, un composant de blog. Le blog peut être considéré comme une application distincte devant être contenue dans un paquet pour une organisation beaucoup plus grande de votre projet..

Un autre exemple serait une section administrative ou "back-end" pour votre site Web. Cette section pourrait facilement être considérée comme un composant distinct de l'application principale et pourrait plutôt être organisée en un ou plusieurs ensembles..

Est-ce que ce code rentre dans une seule classe?

Si tel est le cas, vous pouvez envisager d'écrire une 'bibliothèque' à la place. Une bibliothèque est une classe unique contenant du code réutilisable. Il peut être facilement ajouté à un projet Laravel en laissant tomber la classe dans la classe. application / bibliothèques / répertoire, qui est chargé automatiquement par défaut.


Créer un paquet

Créons un plug-in simple qui interagit avec le service Gravatar afin de proposer une méthode simple pour générer des avatars de différentes tailles dans notre application principale. Nous ajouterons également les fonctionnalités nécessaires pour saisir une adresse e-mail et la taille de l'avatar, et pour prévisualiser le gravatar associé sur la page..

Commençons par créer un nouveau répertoire dans le /liasses répertoire de notre projet. Nous appellerons le répertoire et notre forfait gravvy. Pas de sauce… gravvy.

Ajoutons gravvy au tableau de bundles dans application / bundles.php afin que nous puissions le tester au fur et à mesure. Nous allons ajouter un 'auto' => true option sur le tableau pour que le paquet soit démarré automatiquement et que tous les mappages d'autoloader que nous créons soient disponibles pour l'ensemble de Laravel.

return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true));

Tout d'abord, nous devrons créer une petite bibliothèque qui récupérera l'avatar d'un utilisateur, en utilisant une adresse électronique. Créez un nouveau fichier à la racine du paquet, nommé gravvy.php. Créons une classe, appelée Gravvy avec une méthode statique, faire(), reproduire le schéma de nommage utilisé par les bibliothèques de Laravel.

le faire() La méthode acceptera deux paramètres: une adresse électronique et un entier représentant la taille de l'avatar à récupérer..

 * / class Gravvy / ** * Créez un nouvel élément d'image à partir d'une adresse email. * @param string $ email L'adresse email. * @param integer $ size La taille de l'avatar. * @return string La source d'un élément d'image. * / fonction statique publique make ($ email, $ size = 32) // convertit notre email en un hash md5 $ email = md5 ($ email); // retourne l'élément image return '');  / ** * Teste qu'une sortie d'avatars apparaît comme prévu lorsque * spécifie une taille d'avatar personnalisée. * * @return void * / public function testAvatarImageIsGeneratedWithSize () // démarre le paquet gravvy Bundle :: start ('gravvy'); // vérifie que la sortie correspond à la valeur attendue $ this-> assertEquals (Gravvy :: make ('[email protected] ', 64),''); 

Ci-dessus, nous avons écrit deux tests PHPUnit: l'un pour tester le résultat de la génération d'un avatar à l'aide d'un courrier électronique et l'autre qui spécifie également une taille d'avatar en pixels. Vous remarquerez que nous appelons Bundle :: start ('gravvy') pour démarrer manuellement le paquet. En effet, Laravel ne charge pas automatiquement les ensembles via l'interface de ligne de commande à l'heure actuelle..

En tant que membre essentiel de l’équipe, je voudrais signaler que nous avons l’intention de résoudre ce problème dans une future version.!

Utilisons Artisan pour exécuter nos tests PHPUnit en tapant le tester commande et en utilisant le nom du paquet, gravvy, en paramètre.

php artisan test gravvy

Génial! Nos tests ont été couronnés de succès au premier essai et notre ego a grandi - juste un peu!

Maintenant que notre classe Gravvy a été testée, les utilisateurs peuvent l’utiliser dans leurs propres applications! Allons un peu plus loin et créons quelques pages simples pour générer et prévisualiser des gravatars. Nous pouvons utiliser cet exemple pour savoir comment le système de routage traite les offres groupées..

Pour commencer, créons un nouveau contrôleur 'preview' pour notre bundle. Nous devrons créer un contrôleurs répertoire dans le paquet, et, à l'intérieur, nous ajouterons un nouveau fichier: preview.php.

 

Le nom du contrôleur doit être préfixé avec le nom du paquet et ajouté avec _Manette - comme avec les contrôleurs normaux.

Nous pourrions créer des routes pour mapper nos actions de contrôleur sur des URI sensibles, mais ne serait-il pas préférable de laisser l'utilisateur de notre bundle décider de l'URI de base à utiliser? Ce serait? Faisons cela alors!

En ajoutant un 'handles' => 'gravvy' paire clé-valeur du tableau de configuration des ensembles, nous pouvons permettre à l'utilisateur de le modifier sans modifier le code de l'ensemble lui-même. Voici la configuration résultante dans application / bundles.php.

return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true, 'handles' => 'gravvy'));

Maintenant nous pouvons utiliser le (:paquet) titulaire dans nos itinéraires, qui seront remplacés par la valeur du poignées option. Créons un routes.php déposer à la racine de nos paquets et ajouter des itinéraires.

Route :: get ('(: bundle) / form', 'gravvy :: preview @ form'); Route :: post ('(: bundle) / preview', 'gravvy :: preview @ preview');

Nous avons la route GET gravvy / forme qui est mappé à la forme action du Aperçu contrôleur, et POST gravvy / preview qui est mappé à la Aperçu action du Aperçu manette.

Créons les vues associées pour nos actions de contrôleur; vous pouvez les rendre aussi complexes et jolies que vous le souhaitez, mais je vais les garder simples. Tout d'abord, créez un vues dossier dans le paquet, comme avec le répertoire de l'application.

 

Maintenant que nous avons un formulaire qui va envoyer un email et un champ de taille au aperçu @ aperçu paire contrôleur / action, créons une page d’aperçu de l’avatar généré; nous utiliserons un attribut nommé élément $, tenir sa source.

 

$ element

HTML :: link \ _to \ _action ('gravvy :: preview @ form', '< Go Back!')

Maintenant, nous devons modifier le Aperçu action pour utiliser les données soumises à partir du formulaire.

/ ** * Affiche l'avatar obtenu. * / public function action_preview () // récupère les données de notre formulaire $ email = Input :: get ('email'); $ size = Input :: get ('size'); // générer l'avatar $ avatar = Gravvy :: make ($ email, $ size); // charge la vue d'aperçu. retour View :: make ('gravvy :: preview') -> with ('element', $ avatar); 

Nous récupérons les données POST et les utilisons pour créer notre avatar. Il faut aussi ajouter un avec() méthode à la Voir :: make () chaîne pour permettre à l'élément d'être utilisé dans la vue.

Nous pouvons enfin tester notre système de prévisualisation d'avatar! Regardez le / gravvy / forme URI et essayez! Tout fonctionne comme prévu.

Ce n'est peut-être pas le meilleur moyen d'organiser votre offre, mais il met en évidence certaines des choses utiles possibles. Amusez-vous à créer vos propres ensembles et veillez à les publier sur le site Web des ensembles..


Publier un paquet

Une fois que votre groupe est fonctionnel, vous pouvez envisager de l'inclure dans le répertoire des ensembles Laravel. Passons en revue le processus de soumission d'un nouveau paquet.

Tout d'abord, vous aurez besoin d'un compte GitHub et de la version de votre bundle au sein d'un référentiel public. GitHub offre des comptes gratuits avec un nombre illimité de référentiels publics; vous trouverez leur formulaire d'inscription ici.

Si vous débutez dans le contrôle de version avec Git, je vous suggère de lire la grande série d'articles sur Git ici sur Nettuts.+.

Une fois que votre compte et votre code sont en ordre, assurez-vous que la dernière version de votre bundle se trouve dans la branche "maître" et que la racine de votre bundle (où start.php serait) est la racine du référentiel, plutôt qu'un sous-répertoire.

Visitez ensuite le site Web du répertoire des ensembles de Laravel et connectez-vous à l'aide de vos informations d'identification GitHub..

Cliquez maintenant sur le bouton «Soumettre un ensemble», sélectionnez votre référentiel d’offres dans le menu déroulant, puis cliquez sur le bouton «Continuer»..

Le formulaire d'inscription est assez simple, mais voici quelques "pièges" que vous ne remarquerez peut-être pas.

prénom

Nom est le mot clé en minuscule utilisé pour installer votre application. Il doit s'agir d'un mot court mais précis pour décrire votre forfait..

Description sommaire

Ces champs peuvent contenir un contenu au format Markdown. Alors n'hésitez pas à copier le contenu de votre GitHub LISEZMOI.md fichier.

Dépendances / Tags

Utilisez le bouton virgule de votre clavier pour séparer les balises et les dépendances. Le champ des dépendances doit contenir le mot-clé d'installation court pour le bundle existant en tant que dépendance pour le bundle que vous soumettez..

actif

le actif Ce champ détermine simplement si le paquet sera affiché ou non pour les autres utilisateurs. Vous pouvez toujours installer des ensembles inactifs à l'aide de leur mot clé install à des fins de test. Définissez ce champ sur 'Oui' uniquement lorsque vous êtes prêt à utiliser votre forfait.

Une fois que vous avez cliqué sur le bouton "Enregistrer", votre groupe a été soumis et, s'il est marqué "Actif", apparaît dans les listes de groupes. Vous pouvez toujours modifier votre liste d'ensembles à une date ultérieure.


Trouver des lots

Les bundles qui ont été partagés avec la communauté Laravel sont répertoriés dans le répertoire Bundles à l'adresse http://bundles.laravel.com..

Vous pouvez parcourir les offres par catégorie ou utiliser la fonction de recherche pour trouver l’offre que vous recherchez. Une fois que vous avez trouvé un ensemble qui répond à vos exigences, consultez l'onglet "Installation" du profil de cet ensemble pour trouver le mot clé install..


Installer un paquet

Une fois que vous avez le mot clé d'installation pour un ensemble, vous pouvez l'installer à partir de la base de votre projet à l'aide de l'interface de ligne de commande 'Artisan'. bundle: installer commander. Par exemple…

bundle artisan php: installer bob

Artisan consultera l'API des ensembles pour récupérer le chemin d'accès au référentiel GitHub des ensembles et aux référentiels de toutes ses dépendances. Il téléchargera ensuite les paquets sources directement à partir de GitHub et les extraira vers le /liasses répertoire pour vous.

Vous devrez ajouter manuellement le nom de l’ensemble au tableau dans application / bundles.php pour que le paquet devienne activé.

return array ('docs' => array ('handles' => 'docs'), 'bob');

Dans certaines situations, vous devrez peut-être ajouter des informations supplémentaires à cette tableau entrée pour faciliter le démarrage automatique ou pour diriger certains itinéraires vers le groupe. L’auteur aura fourni ces informations supplémentaires dans la description des ensembles, si tel est le cas..


Merci de lire et de créer vos propres paquets avec Laravel! Si vous souhaitez en savoir plus sur Laravel, assurez-vous de prendre mon livre!