Gestion de paquets à Laravel

Dans cet article, nous allons explorer la fonctionnalité de gestion des paquets dans le framework Laravel. Au cours de l'article, nous allons passer à travers un exemple concret pour illustrer le but de l'article..

La gestion des paquets dans Laravel est une fonctionnalité importante qui vous permet de regrouper une fonctionnalité afin de pouvoir la distribuer facilement. De plus, vous pouvez toujours publier votre paquet dans des référentiels tels que Packagist et GitHub, ce qui permet aux autres développeurs de tirer profit de votre paquet..

Pour illustrer ce concept, nous allons créer un exemple de page dans Laravel qui télécharge une image sur le cloud Amazon S3. Plutôt que de suivre le flux habituel, nous le développerons comme un paquet groupé pouvant être distribué et maintenu facilement.

Avant de poursuivre, je suppose que vous connaissez déjà le framework Laravel car je n’entrerai pas dans les détails des concepts de base de Laravel..

En outre, vous devez disposer d'un compte AWS valide et des informations d'identification pour accéder à l'API Amazon afin de suivre l'exemple de cet article. Alors, assurez-vous que vous configurez cela en premier.

Avec tout sous la main, nous sommes prêts à plonger dans le développement actuel.

Configuration des fichiers de package

Regardons rapidement la liste des fichiers que nous allons implémenter tout au long de ce tutoriel..

  • composer.json: Nous devons ajouter le mappage de classe de notre paquet dans le fichier existant. composer.json fichier à la racine du paquet.
  • config / app.php: Ceci est le fichier existant que nous utiliserons pour ajouter une entrée de notre fournisseur de services personnalisé afin que nous puissions charger des vues et des itinéraires à l'aide de ce fichier..
  • composer.json: Ceci est spécifique au paquet composer.json fichier si vous souhaitez distribuer le paquet avec d'autres.
  • packages / envato / aws / src / Fournisseurs / AwsServiceProvider.php: Le fichier de fournisseur de services Laravel habituel qui sera utilisé pour charger d'autres composants du paquet.
  • packages / envato / aws / src / routes / web.php: Il charge les itinéraires personnalisés de notre paquet.
  • packages / envato / aws / src / Contrôleurs / AwsController.php: Ceci est le fichier de contrôleur qui gère la logique d'application de notre paquet.
  • packages / envato / aws / src / views / upload.blade.php: Le fichier de vue qui gère la logique de rendu.

Ne vous inquiétez pas si cela n'a pas encore beaucoup de sens car nous discuterons de tout en détail au fur et à mesure..

Configuration des prérequis

Comme nous l'avons vu précédemment, notre package implémente le cas d'utilisation du téléchargement de fichier vers le cloud Amazon S3. Dans cette section, nous allons passer en revue les prérequis à configurer pour pouvoir exécuter notre package avec succès..

En tant que développeur Laravel, vous devez être familiarisé avec Flysystem, qui fournit une couche d'abstraction agréable pour interagir avec le système de fichiers. Il fournit des pilotes faciles à utiliser qui vous permettent d’interagir facilement, quel que soit le type de système de fichiers utilisé: système de fichiers local ou système cloud AWS S3..

Afin de permettre la prise en charge du système de fichiers cloud Amazon S3 avec Flysystem, vous devez installer le package d'adaptateur Composer correspondant..

Continuez et exécutez la commande suivante du composeur à partir de la racine de votre projet pour installer le package flysystem-aws-s3-v3..

$ composer a besoin de ligue / système de vol-aws-s3-v3

Une fois cette commande exécutée avec succès, vous pouvez désormais utiliser Laravel Flysystem pour interagir avec le système de fichiers cloud Amazon S3 de la même manière que vous l'auriez utilisé pour le système de fichiers local..

Maintenant, entrons rapidement dans le config / filesystems.php fichier pour voir les paramètres fournis pour le système de fichiers Amazon S3.

… 'Disks' => ['local' => ['driver' => 'local', 'root' => storage_path ('app'),], 'public' => ['driver' => 'local' , 'root' => storage_path ('app / public'), 'url' => env ('APP_URL'). '/ storage', 'accessibility' => 'public',], 's3' => [' driver '=>' s3 ',' key '=> env (' AWS_KEY '),' secret '=> env (' AWS_SECRET '),' region '=> env (' AWS_REGION '),' bucket '=> env ('AWS_BUCKET'),],],… 

Comme vous pouvez le constater, la configuration est déjà en place pour Amazon S3. c'est juste que nous devons définir approprié ENV variables dans le .env fichier.

Allez-y et ajoutez les variables suivantes dans votre .env fichier.

AWS_KEY = AWS_KEY_VALUE AWS_SECRET = AWS_SECRET_VALUE AWS_REGION = AWS_REGION_VALUE AWS_BUCKET = AWS_BUCKET_VALUE AWS_CDN_URL = AWS_CDN_URL_VALUE

Bien sûr, vous devez remplacer les espaces réservés par leurs valeurs réelles. Vous êtes maintenant prêt à utiliser l'adaptateur Flysystem AWS S3 dans votre application Laravel..

Parcourir les fichiers de package

Pour créer votre propre package Laravel, la première chose à faire est de créer une structure de répertoires appropriée qui reflète les conventions du système Laravel. Je suppose que vous utilisez déjà une application de base Laravel; en fait, le défaut Blog l'application fera aussi bien.

Allez-y et créez le paquets répertoire à la racine de votre application. Considérant que vous allez distribuer votre paquet avec d’autres, la structure préférée de votre paquet devrait être nom du vendeur / nom du paquet.

À la suite de cette convention, allons de l'avant et créons un envato / aws répertoire sous le paquets annuaire. Comme vous l'avez peut-être deviné, envato est le nom du vendeur, et aws représente le nom du paquet lui-même. Enfin, créons un packages / envato / aws / src répertoire qui contient les fichiers source de notre paquet.

Nous devons maintenant informer Laravel de notre nouveau paquet. Allez-y et ouvrez le composer.json fichier à la racine de votre application Laravel et ajoutez le "Envato \\ Aws \\": "packages / envato / aws / src" entrée dans la section autoload comme indiqué ci-dessous.

… "Autoload": "classmap": ["database"], "psr-4": "App \\": "app /", "Envato \\ Aws \\": "packages / envato / aws / src ",… 

Comme vous pouvez le voir, le Envato \ Aws \ L'espace de noms est mappé sur le packages / envato / aws / src annuaire. Maintenant, il suffit d’exécuter la commande dump-autoload pour régénérer les mappages du compositeur.

$ composer dump-autoload

Maintenant, vous pouvez utiliser le Envato \ Aws \ espace de noms dans votre application et il va ramasser les fichiers à l'emplacement correct!

Fichier de composition du package

Maintenant, allons de l'avant et ajoutons un paquet spécifique composer.json fichier afin que vous puissiez distribuer votre paquet dans le référentiel packagist.

Aller au packages / envato / aws répertoire et exécutez la commande suivante pour générer un composer.json fichier pour votre colis.

$ compositeur init

Vous serez invité à répondre aux questions habituelles, alors parcourez-le et cela créera un composer.json fichier.

À tout le moins, cela devrait ressembler à ceci.

"name": "envato / aws", "description": "Exemple de téléchargement de fichier vers AWS S3 Cloud", "stabilité minimale": "dev", "require":  

Route

Dans notre package, nous allons créer une page simple qui affiche le statut du fichier téléchargé. Nous avons donc besoin de créer un itinéraire associé à cette page.

Créons un fichier de route à packages / envato / aws / src / routes / web.php.

Cela nécessite-t-il une explication? La prochaine étape évidente consiste à créer le fichier de contrôleur associé..

Manette

Créons un fichier de contrôleur à packages / envato / aws / src / Contrôleurs / AwsController.php avec le contenu suivant.

disque ('s3'); // charge le stockage local $ localStorage = $ storage-> disk ('local'); // chemin par défaut du stockage local "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg'); // chemin du fichier de destination dans le nuage S3 $ destFilePath = 'test_new.jpg'; // init vars $ imageUrl = "; $ errorMsg ="; // téléversez le fichier dans AWS S3 si ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ('AWS_BUCKET'). '/' $ destFilePath;  else $ errorMsg = 'Oups! Quelque chose s'est mal passé :( '; // Voir la vue de retour de la vue d'appel (' aws :: upload ', [' imageUrl '=> $ imageUrl,' errorMsg '=> $ errorMsg]); 

Passons en revue le fichier pour comprendre à quoi sert chaque morceau de code.

Nous démarrons les choses en définissant un espace de noms de notre contrôleur en espace de noms Envato \ Aws \ Controllers. Rappelons que nous avons ajouté la cartographie de Envato \ Aws à packages / envato / aws / src dans la racine composer.json fichier afin qu'il puisse trouver nos fichiers de paquets.

Ensuite, nous avons défini le télécharger méthode qui synchronise les fichiers locaux avec le cloud Amazon S3. La chose importante à noter ici est le premier argument de la méthode de téléchargement qui demande la \ Illuminate \ Contracts \ Filesystem \ Factory dépendance. Pendant l'exécution, le contrat Laravel approprié sera injecté.

Nous pourrions maintenant utiliser l'instance de la fabrique de système de fichiers pour créer des instances de disque selon les besoins. L'instance de disque dans Laravel est le pilote qui vous permet d'accéder facilement aux systèmes de fichiers sous-jacents tels que le disque local, le cloud Amazon S3, etc..

// charge le stockage s3 $ awsS3Storage = $ storage-> disk ('s3'); // charge le stockage local $ localStorage = $ storage-> disk ('local');

Pour plus de simplicité, nous allons transférer le fichier image statique déjà disponible sous le stockage local par défaut de Laravel, et le chemin est stockage / app / test.jpg.

Dans un premier temps, saisissons le contenu du fichier source.

// chemin par défaut du stockage local "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg'); 

Avec tout configuré comme indiqué, vous devriez pouvoir synchroniser un fichier avec Amazon S3 à l'aide de la méthode put..

// téléversez le fichier dans AWS S3 si ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ('AWS_BUCKET'). '/' $ destFilePath;  else $ errorMsg = 'Oups! Quelque chose s'est mal passé :( '; 

Assurez-vous que vous avez défini les variables d'environnement AWS correctement, juste au cas où quelque chose ne fonctionnerait pas comme prévu.

Et la dernière chose à faire est d’appeler un fichier de vue qui affiche l’image synchronisée et un message approprié..

// vue de retour de vue d'appel ('aws :: upload', ['imageUrl' => $ imageUrl, 'errorMsg' => $ errorMsg]); 

Bien sûr, nous n’avons pas encore créé de fichier de vue, et c’est exactement ce que décrit la section suivante..

Vue

Créons un fichier de vue sur packages / envato / aws / src / views / upload.blade.php avec le contenu suivant.

      Laravel       
@if (Route :: has ('login'))
@if (Auth :: check ()) Accueil @else Connexion Inscrivez-vous @endif
@fin si
Téléchargement de fichier vers S3 Cloud
@if ($ imageUrl) @autre $ errorMsg @fin si

C'est un fichier de vue assez standard qui affiche l'image téléchargée après le téléchargement réussi, ou sinon un message d'erreur approprié.

Fournisseur de services

Nous avons presque fini avec notre paquet car nous avons créé les fichiers nécessaires. La prochaine étape consiste à créer un fournisseur de services afin que nous puissions enregistrer les itinéraires et les vues de notre package..

Créons un fichier de fournisseur de services sur packages / envato / aws / src / Fournisseurs / AwsServiceProvider.php avec le contenu suivant.

loadRoutesFrom (__ DIR __. '/… /routes/web.php'); // charge les fichiers de vue $ this-> loadViewsFrom (__ DIR __. '/… / views', 'aws'); // publier des fichiers $ this-> publishes ([__DIR __. '/… / views' => chemin_ressource ('views / vendor / aws'),]);  / ** * Enregistrez les services de l'application. * * @return void * / public function register ()  

De toute évidence, vous auriez pu créer le fichier de fournisseur de services en utilisant également la commande artisan. Mais il aurait fallu une étape supplémentaire pour déplacer le fichier de app / fournisseurs à notre paquet.

Quoi qu'il en soit, passons par le fichier du fournisseur de service qui vient d'être créé.

Premièrement, nous chargeons les routes et les vues associées à notre paquet..

// charge les routes $ this-> loadRoutesFrom (__ DIR __. '/… /routes/web.php'); // charge les fichiers de vue $ this-> loadViewsFrom (__ DIR __. '/… / views', 'aws'); 

Ensuite, nous fournissons le support de la publication des vues de nos packages afin que les développeurs qui souhaitent remplacer les vues puissent le faire. La prochaine fois qu'ils courent le fournisseur artisan php: publier commande, Laravel copie les vues de packages / envato / aws / src / views / à ressources / vues / fournisseur / aws.

Maintenant, ils peuvent changer les vues sous la ressources / vues / fournisseur / aws répertoire, et il sera repris automatiquement par Laravel au lieu des vues sous packages / envato / aws / src / views /. En fait, c’est le bon moyen de modifier les vues de paquetages tiers, au lieu de modifier directement les vues de paquetage..

Voilà pour le prestataire de services. Comme vous vous en doutez, nous devons ajouter l’entrée du fournisseur de service dans config / app.php. Ajouter l'entrée suivante dans le fournisseurs tableau.

… / * * Fournisseurs de services d'application… * / App \ Providers \ AppServiceProvider :: class, App \ Providers \ AuthServiceProvider :: class, App \ Providers \ BroadcastServiceProvider :: class, App \ Providers \ EventServiceProvider :: class, App \ Providers \ RouteServiceProvider :: class, Envato \ Aws \ Providers \ AwsServiceProvider :: class, // Notre fournisseur de services de package… 

Et voilà: tout est en ordre maintenant, pour que nous puissions tester notre package.

Allez-y et exécutez l'URL http: // your-laravel-application / aws / s3 / dans votre navigateur. Si tout se passe bien, vous devriez voir l'image sur votre page chargée à partir du cloud Amazon S3. Faites-le moi savoir si vous rencontrez des problèmes, et je serais plus qu'heureux de répondre à ceux.

Nous sommes donc sur la dernière note de cet article et j'espère que vous l'avez apprécié.!

Conclusion

Nous avons discuté aujourd’hui de l’une des caractéristiques importantes de la gestion des packages de framework Laravel. Lors de la configuration de notre package personnalisé Laravel, nous avons présenté un exemple concret qui montre comment vous pouvez télécharger une image sur le cloud Amazon S3..

C'est une fonctionnalité vraiment intéressante si vous souhaitez regrouper et distribuer un ensemble de fonctionnalités. En fait, vous pourriez considérer cela comme une option pour aborder le développement de vos modules personnalisés à Laravel..

Pour ceux d'entre vous qui débutent avec Laravel ou qui souhaitent développer leurs connaissances, leur site ou leur application avec des extensions, nous pouvons étudier de nombreuses choses sur le marché Envato..

Comme toujours, vous pouvez laisser vos précieux commentaires dans le flux ci-dessous.!