J'ai des classes d'assistance dans app/Helpers
. Comment puis-je charger ces classes en utilisant un service provider
Pour les utiliser dans des modèles de lame?
par exemple. Si j'ai une classe CustomHelper
qui contient une méthode fooBar()
:
<?php
nampespace App\Helpers;
class CustomHelper
{
static function fooBar()
{
return 'it works!';
}
}
Je veux pouvoir faire quelque chose comme ça dans mes modèles de lames:
{{ fooBar() }}
au lieu de faire ceci:
{{ \App\Helpers\CustomHelper::fooBar() }}
PS: @ andrew-brown's answer in Meilleures pratiques pour les assistants personnalisés sur Laravel 5 traite des fichiers non-classe. Ce serait bien d'avoir une solution basée sur les classes pour que les fonctions d'aide puissent être organisées entre les classes.
Je ne pense pas qu'il soit possible d'utiliser uniquement la fonction lorsque vous avez du code dans vos classes. Eh bien, vous pouvez essayer d'étendre Blade, mais c'est trop.
Ce que vous devez faire est de créer un fichier supplémentaire, par exemple app\Helpers\helpers.php
et dans votre fichier composer.json mettez:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": ["app/Helpers/helpers.php"] // <- this line was added
},
créer app/Helpers/helpers.php
fichier et exécutez
composer dump-autoload
Maintenant dans votre app/Helpers/helpers.php
fichier, vous pouvez ajouter ces fonctions personnalisées, par exemple comme ceci:
if (! function_exists('fooBar')) {
function fooBar()
{
return \App\Helpers\CustomHelper::fooBar();
}
}
vous définissez donc des fonctions globales, mais en fait, toutes peuvent utiliser des méthodes publiques spécifiques de certaines classes.
Au fait, c'est exactement ce que Laravel fait pour ses propres assistants par exemple:
if (! function_exists('array_add')) {
function array_add($array, $key, $value)
{
return Arr::add($array, $key, $value);
}
}
comme tu vois array_add
n'est qu'une façon d'écrire plus courte (ou peut-être moins verbeuse) Arr::add