Pour commencer, je préférerais que le site officiel de Laravel parle d’aides.
Laravel inclut une variété de fonctions PHP "d'assistance" globales. Beaucoup de ces fonctions sont utilisées par le framework lui-même; cependant, vous êtes libre de les utiliser dans vos propres applications si vous les trouvez pratiques.
Les aides de Laravel sont donc des fonctions utilitaires intégrées que vous pouvez appeler de n’importe où dans votre application. Si elles n’avaient pas été fournies par le cadre principal, vous auriez peut-être fini par développer vos propres classes d’aide.
Bien que le noyau fournisse déjà une variété d’aides, il est toujours possible que vous ayez besoin du vôtre et que vous souhaitiez en développer un de sorte que vous n’ayez pas à répéter le même code ici et là, assurant ainsi une meilleure maintenabilité. Dans ce didacticiel, vous apprendrez à créer un helper Laravel personnalisé..
Comme nous en avons discuté plus tôt, de nombreuses aides sont disponibles dans le noyau du framework Laravel. Ils sont regroupés en fonction des fonctionnalités qu’ils fournissent. Voici une liste des groupes d'assistance.
Les helpers de ce groupe fournissent des fonctionnalités pour manipuler des éléments de tableau. Le plus souvent, vous vous trouvez dans la situation où vous souhaitez effectuer différentes opérations sur des éléments de tableau. Donc, c'est l'endroit où vous devriez regarder en premier pour voir si ce que vous cherchez existe déjà.
Je trouve les aides de cette catégorie des plus utiles. Ils renvoient le chemin complet de différents répertoires tels que app, storage, config, etc. Je parie que vous utilisez déjà la plupart de ces aides dans votre application Laravel.
La manipulation des chaînes est une chose inévitable dans le développement quotidien de vos applications. Bien qu'il existe de nombreuses fonctions de manipulation de chaînes fournies par PHP lui-même, vous trouverez quelques autres avantages utiles dans cette section..
Vous en trouverez très peu dans cette catégorie, mais ils sont utilisés dans toute l'application. Ils sont utilisés pour générer des URL de route, d'actif et de formulaire..
Cette catégorie contient des aides qui offrent une variété de fonctionnalités allant de la journalisation au débogage et bien d’autres.
Pour une référence complète des aides de Laravel, il n'y a pas de meilleur endroit que la documentation officielle.
Vous avez maintenant une compréhension de base des aides de Laravel et de leur utilité. Dans cette section, je vais vous montrer comment créer votre propre aide personnalisée pouvant être utilisée globalement dans votre application Laravel..
Pour que les choses restent simples et faciles à comprendre, ce sera un utilitaire assez basique qui prend un ID utilisateur et retourne un nom d'utilisateur en réponse. Bien sûr, cela n’a pas l’air fantaisie, mais je pense que c’est suffisant pour démontrer le concept, et vous pouvez toujours l’étendre pour répondre à vos besoins complexes..
Je suppose que vous avez une table d'utilisateurs dans votre base de données et qu'elle a au moins deux champs: user-id et username.
Avant de poursuivre et de créer les fichiers, examinons rapidement les fichiers que nous allons créer dans le reste de l'article..
app / Helpers / Envato / User.php
: C'est notre fichier d'aide qui contient la logique de notre aide.app / Providers / EnvatoServiceProvider.php
: C'est un fichier de fournisseur de services personnalisé qui charge notre fichier d'assistance personnalisé.config / app.php
: Dans ce fichier, nous déclarons notre fournisseur de services personnalisé, ce qui nous aide également à définir un alias pour notre aide afin que nous n'ayons pas à utiliser le nom de classe complet de notre aide..routes / web.php
: Un fichier de routage assez standard de Laravel où nous allons tester notre assistant.Bien que vous puissiez placer vos fichiers d’aide n’importe où dans votre application, la méthode la plus intuitive et la plus standard suggère de les placer sous votre compte. app
annuaire.
Alors allez-y et créez un Aides / Envato
répertoire sous app
et créer un User.php
fichier avec le contenu suivant. Bien sûr, vous pouvez le placer directement sous le app
ou app / Helpers
répertoire, mais fournir ce niveau supplémentaire nous permet d’organiser nos assistants en bon état, en particulier lorsque vous en aurez beaucoup.
where ('userid', $ user_id) -> first (); return (isset ($ utilisateur-> nom d'utilisateur)? $ utilisateur-> nom d'utilisateur: ");
Le fichier commence par une déclaration d'espace de noms assez standard:
espace de noms App \ Helpers \ Envato;
Le but de notre assistant personnalisé est de récupérer un nom d'utilisateur basé sur un ID utilisateur. Nous devons donc interagir avec la base de données, ce qui nous oblige à inclure DB Facade.
utilisez Illuminate \ Support \ Facades \ DB;
Pour ceux qui ne sont pas familiarisés avec les façades Laravel, c'est simplement un autre moyen pratique d'accéder aux objets dans les conteneurs de services. Alternativement, vous pourriez avoir utilisé l'injection de dépendance.
À l'avenir, nous assistons à la mise en œuvre concrète de notre aide. Comme vous pouvez le constater, une méthode statique définit la logique de récupération d'un nom d'utilisateur en fonction d'un ID utilisateur..
$ user = DB :: table ('utilisateurs') -> où ('utilisateur', $ utilisateur_id) -> premier ();
le $ utilisateur
L'objet contient l'enregistrement de la base de données avec l'ID utilisateur correspondant. Enfin, la méthode renvoie le nom d'utilisateur sous forme de réponse dans l'instruction suivante..
return (isset ($ utilisateur-> nom d'utilisateur)? $ utilisateur-> nom d'utilisateur: ");
Voilà pour notre fichier d'assistance.
Maintenant, nous avons créé notre fichier d'aide, mais la question est de savoir comment vous allez l'utiliser. Deux solutions rapides me viennent à l’esprit:
composer.json
, afin qu'il soit auto-chargé. Ensuite, vous pouvez immédiatement appeler la méthode statique de notre classe d’aide.Bien sûr, le premier est assez rapide et facile à mettre en œuvre, et vous pourriez être tenté de le faire, mais je suggérerais plutôt le dernier car il ressemble plus à un moyen artisanal et est plus facile à maintenir.
Passez à la ligne de commande et exécutez la commande suivante à la racine de votre application pour créer un nouveau fournisseur de services..
$ php fabrication artisanale: fournisseur EnvatoServiceProvider Fournisseur créé avec succès.
Vous devriez voir le message qui confirme sa création avec succès sous le app / fournisseurs
annuaire.
Ouvrez ce fichier et vous devriez déjà voir deux méthodes. L’important dans le contexte de cet article est la registre
méthode. Oui, il est vide pour le moment, alors ajoutons quelques éléments pour le rendre plus utile.
fonction publique register () require_once app_path (). '/Helpers/Envato/User.php';
La méthode register est utilisée pour enregistrer vos dépendances, et c'est exactement ce que nous avons fait. Nous avons inclus notre fichier d'assistance personnalisé.
Voici comment app / Providers / EnvatoServiceProvider.php
le fichier doit s'occuper des modifications.
Donc tout va bien jusqu'à présent. Nous avons notre assistant personnalisé et notre fournisseur de services sur la table.
Ensuite, nous devons informer Laravel de notre fournisseur de services afin qu’il puisse le charger pendant l’amorçage. Ouvrons le
config / app.php
et ajoutez l'entrée suivante dans lafournisseurs
tableau à la fin.App \ Providers \ EnvatoServiceProvider :: class,Pour utiliser notre assistant de manière pratique, nous pourrions également créer un alias. Alors faisons cela en ajoutant l'entrée suivante dans le
alias
tableau à la fin dans le même fichier.'EnvatoUser' => App \ Helpers \ Envato \ User :: class,En définissant cette entrée, nous pouvons appeler notre assistant en utilisant le
EnvatoUser
mot-clé. Assez pratique, hein? Pour votre référence, voici la complèteconfig / app.php
fichier.'Laravel', / * | ------------------------------------------- ------------------------------- | Environnement d'application | --------------------------------------------------- --------------------------- | | Cette valeur détermine "l'environnement" de votre application | Cela peut déterminer comment vous préférez configurer divers | services que votre application utilise. Définissez ceci dans votre fichier ".env". | * / 'env' => env ('APP_ENV', 'production'), / * | ----------------------------- --------------------------------------------- | Mode de débogage de l'application | -------------------------------------------------- ---------------------------- | | Lorsque votre application est en mode débogage, des messages d'erreur détaillés avec | les traces de pile seront affichées sur chaque erreur qui se produit dans votre | application. Si cette option est désactivée, une page d'erreur générique simple est affichée. | * / 'debug' => env ('APP_DEBUG', false), / * | ------------------------------- ------------------------------------------- | URL de l'application | --------------------------------------------------- --------------------------- | | Cette URL est utilisée par la console pour générer correctement les URL lorsque vous utilisez | l'outil de ligne de commande Artisan. Vous devez définir ceci à la racine de | votre application afin qu'elle soit utilisée lors de l'exécution de tâches Artisan. | * / 'url' => env ('APP_URL', 'http: // localhost'), / * | ------------------------- ------------------------------------------------- | Fuseau horaire de l'application | --------------------------------------------------- --------------------------- | | Ici, vous pouvez spécifier le fuseau horaire par défaut pour votre application, qui | sera utilisé par les fonctions PHP date et date-heure. Nous sommes partis | à l’avance et réglez-le sur une valeur par défaut raisonnable pour vous, dès la première utilisation. | * / 'timezone' => 'UTC', / * | ---------------------------------------- -------------------------------------- | Configuration des paramètres régionaux de l'application | -------------------------------------------------- ---------------------------- | | Les paramètres régionaux de l'application déterminent les paramètres régionaux par défaut qui seront utilisés | par le prestataire de services de traduction. Vous êtes libre de définir cette valeur | à l’un des paramètres régionaux qui seront pris en charge par l’application. | * / 'locale' => 'en', / * | ---------------------------------------- -------------------------------------- | Paramètres régionaux de secours de l'application | -------------------------------------------------- ---------------------------- | | Les paramètres régionaux de secours déterminent les paramètres régionaux à utiliser lorsque le | n'est pas disponible. Vous pouvez changer la valeur pour qu'elle corresponde à | les dossiers de langue fournis via votre application. | * / 'fallback_locale' => 'en', / * | -------------------------------------------- -------------------------------------- | Clé de cryptage | --------------------------------------------------- --------------------------- | | Cette clé est utilisée par le service de cryptage Illuminate et doit être définie | en une chaîne aléatoire de 32 caractères, sinon ces chaînes cryptées | ne sera pas en sécurité. Merci de le faire avant de déployer une application! | * / 'key' => env ('APP_KEY'), 'cipher' => 'AES-256-CBC', / * | -------------------- -------------------------------------------------- ---- | Configuration de la journalisation | --------------------------------------------------- --------------------------- | | Ici, vous pouvez configurer les paramètres de journal pour votre application. Sur | Dans la boîte, Laravel utilise la bibliothèque de journalisation PHP Monolog. Cela donne | vous avez à votre disposition une variété de gestionnaires de journaux puissants. | | Paramètres disponibles: "single", "daily", "syslog", "errorlog" | * / 'log' => env ('APP_LOG', 'single'), 'log_level' => env ('APP_LOG_LEVEL', 'debug'), / * | ------------- -------------------------------------------------- ----------- | Fournisseurs de services à chargement automatique | -------------------------------------------------- ---------------------------- | | Les fournisseurs de services répertoriés ici seront automatiquement chargés sur le | demande à votre application. N'hésitez pas à ajouter vos propres services à | cette matrice pour accorder des fonctionnalités étendues à vos applications. | * / 'providers' => [/ * * Fournisseurs de services Laravel Framework… * / Illuminate \ Auth \ AuthServiceProvider :: class, Illuminate \ Broadcasting \ BroadcastServiceProvider :: class, Illuminate \ Bus \ BusServiceProvider :: class, Illuminate \ Broadcasting \ BroadcastServiceProvider :: class, Illuminate \ Cache \ CacheServiceProvider :: class, Illuminate \ Foundation \ Providers \ ConsoleSupportServiceProvider :: class, Illuminate \ Cookie \ CookieServiceProvider :: class, Illuminate \ Database \ DatabaseServiceProvider :: class, Illuminate \ EncryptionServiceProvider :: class, Illuminate \ Database \ DatabaseServiceProvider :: class, Illuminate \ EncryptionServiceProvider :: class, Illuminate \ FilesystemServiceProvider :: class , Illuminate \ Foundation \ Providers \ FoundationServiceProvider :: class, Illuminate \ Hashing \ HashServiceProvider :: class, Illuminate \ Mail \ MailServiceProvider :: class, Illuminate \ Notifications \ NotificationServiceProvider :: class, Illuminate \ Mail \ MailServiceProvider :: class, Illuminate \ Pagination \ Pagination \ Pagination \ Pagination \ Pagination Pipeline \ PipelineServiceProvider :: class, Illuminate \ Queue \ QueueServiceProvider :: class, Illuminate \ Redis \ RedisServiceProvider :: class, Illuminate \ Auth \ Passwords \ PasswordResetServi ceProvider :: class, Illuminate \ Session \ SessionServiceProvider :: class, Illuminate \ Translation \ TranslationServiceProvider :: class, Illuminate \ Validation \ ValidationServiceProvider :: class, Illuminate \ View \ ViewServiceProvider :: class, / * * Fournisseurs de services de packages… * / Laravel \ Tinker \ TinkerServiceProvider :: class, / * * 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, App \ Providers \ EnvatoServiceProvider :: class,], / * | --------------------- -------------------------------------------------- --- | Alias de classe | --------------------------------------------------- --------------------------- | | Ce tableau d'alias de classe sera enregistré lorsque cette application | a démarré. Cependant, n'hésitez pas à enregistrer autant que vous le souhaitez en tant que | les alias sont chargés "paresseux" pour ne pas nuire aux performances. | * / 'aliases' => ['App' => Illuminer \ Support \ Façades \ App :: classe, 'Artisan' => Illuminer \ Support \ Façades \ Artisan :: classe, 'Auth' => Illuminer \ Support \ Façades \ Auth :: class, 'Blade' => Illuminer \ Support \ Façades \ Blade :: class, 'Broadcast' => Illuminer \ Support \ Façades \ Broadcast :: class, 'Bus' => Illuminer \ Support \ Façades \ Bus :: class, 'Cache' => Illuminate \ Support \ Façades \ Cache :: class, 'Config' => Illuminate \ Support \ Façades \ Config :: class, 'Cookie' => Illumine \ Support \ Façades \ Cookie :: classe, 'Crypt' => Illuminate \ Support \ Façades \ Crypt :: class, 'DB' => Illuminate \ Support \ Façades \ DB :: class, 'Eloquent' => Illuminate \ Database \ Eloquent \ Model :: class, 'Event' => Illuminate \ Support \ Façades \ Event :: class, 'Fichier' => Illuminate \ Support \ Facades \ Fichier :: class, 'Gate' => Illuminé \ Support \ Façades \ Gate :: class, 'Hash '=> Illuminer \ Support \ Façades \ Hash :: class,' Lang '=> Illuminer \ Support \ Façades \ Lang :: class,' Log '=> Illuminer \ Support \ Façades \ Log :: class,' Mail '= > Illuminer \ Support \ Façades \ Mail :: classe, 'Non tification '=> Illuminer \ Support \ Façades \ Notification :: class,' Mot de passe '=> Illuminer \ Support \ Façades \ Mot de passe :: class,' Queue '=> Illuminer \ Support \ Façades \ Queue :: class,' Rediriger ' => Illuminate \ Support \ Facades \ Redirect :: class, 'Redis' => Illuminate \ Support \ Facades \ Redis :: class, 'Request' => Illuminate \ Support \ Facades \ Request :: class, 'Response' => Illuminer \ Support \ Façades \ Réponse :: classe, 'Route' => Illuminer \ Support \ Façades \ Route :: classe, 'Schéma' => Illuminer \ Support \ Façades \ Schéma :: classe, 'Session' => Illuminer \ Support \ Facades \ Session :: class, 'Storage' => Illuminate \ Support \ Facades \ Storage :: class, 'URL' => Illuminate \ Support \ Facades \ URL :: class, 'Validator' => Illuminate \ Support \ Facades \ Validator :: class, 'View' => Illuminate \ Support \ Facades \ View :: class, 'EnvatoUser' => App \ Helpers \ Envato \ User :: class,],];Nous y sommes presque! Nous avons fait tout le travail pour arriver ici et nous pouvons maintenant profiter des avantages de notre assistant personnalisé.
Votre premier assistant personnalisé en action
Encore une fois, pour que les choses restent simples et directes, nous allons définir un itinéraire de base pour Laravel et appeler notre aide à partir de là.!
Allez-y et créez un
routes / web.php
fichier avec le contenu suivant.Cela nécessite-t-il une explication? Nous venons d'appeler l'assistant personnalisé par le raccourci
EnvatoUser :: get_username
, et il devrait retourner le nom d'utilisateur.Bien entendu, vous pouvez appeler notre assistant depuis n’importe où dans l’application, que ce soit un contrôleur ou une vue..
Voilà qui termine notre histoire pour aujourd'hui.
Conclusion
Les helpers de Laravel sont vraiment une fonctionnalité puissante, et je suis sûr qu’en tant que développeur, vous aimeriez étendre cela. Et c’était le sujet d’aujourd’hui: nous avons étudié les bases de la structure de fichier d’aide de Laravel et créé un utilitaire personnalisé.
J'espère que vous avez apprécié l'article et qu'il vous aide à créer vos propres aides personnalisées dans le développement d'applications Laravel au quotidien..
N'hésitez pas à laisser vos commentaires et questions dans le flux ci-dessous. J'attrape aussi les commentaires sur mon Twitter et y réponds dès que je peux!