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.
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..
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..
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!
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":
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 deEnvato \ Aws
àpackages / envato / aws / src
dans la racinecomposer.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 siTéléchargement de fichier vers S3 Cloud@if ($ imageUrl) @autre $ errorMsg @fin siC'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 depackages / 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 souspackages / 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 lefournisseurs
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.!