2015-09-06 2 views
20

Si je voulais faire une fonction currentUser() pour certains trucs oauth je fais où je peux l'utiliser dans une vue ou dans un contrôleur (pensez à des rails, où vous faites helper_method: current_user dans le contrôleur d'application). Tout ce que je lis, c'est de créer un dossier helpers et d'ajouter la fonction là-bas, et ainsi de suite Helpers::functionName Est-ce la bonne façon de procéder?Comment faire des fonctions d'aide globales dans laravel 5?

Quelle est la "manière larvale" de créer des fonctions auxiliaires pouvant être utilisées dans les modèles de lames et les contrôleurs?

+0

Peut-être cela va vous aider: http://stackoverflow.com/questions/28290332/best-practices-for-custom-helpers-on-laravel-5 – Iamzozo

Répondre

46

Créer un nouveau fichier dans votre application/nom de répertoire Helpers il AnythingHelper.php Un exemple de mon aide est:

<?php 
function getDomesticCities() 
{ 
$result = \App\Package::where('type', '=', 'domestic') 
    ->groupBy('from_city') 
    ->get(['from_city']); 

return $result; 
} 

générer un fournisseur de services pour votre aide par commande suivante

php artisan make:provider HelperServiceProvider 

dans la fonction de registre de votre HelperServiceProvider.php nouvellement généré ajouter le code suivant

require_once app_path('Helpers/AnythingHelper.php'); 

maintenant dans votre config/charger app.php ce fournisseur de services et vous êtes fait

'App\Providers\HelperServiceProvider', 
+0

Comment l'utilisez-vous dans la lame. Avez-vous besoin d'enregistrer la façade? – MaXi32

+1

Non, seul le code mentionné ci-dessus le fait, dans votre fichier lame do {{yourHelperFunction ('param')}} –

+0

Je souhaite pouvoir appeler la fonction d'assistance avec Helper :: myHelperFunction ('param') dans blade. C'est plus joli. Savez-vous comment l'enregistrer? – MaXi32

18

Une autre façon efficace de créer un fichier de fonctions global est de autoload directement du compositeur. La section autoload de composer accepte un tableau files qui est automatiquement chargé.

  1. Créez un fichier functions.php où vous le souhaitez, dans cet exemple, nous allons créer à l'intérieur app/Helpers.

  2. Ajoutez vos fonctions, mais ne pas ajouter une classe ou d'espace de noms.

    <?php 
    
    function global_function_example($str) 
    { 
        return 'A Global Function with '. $str; 
    } 
    
  3. En composer.json dans la section autoload ajoutez la ligne suivante:

    "files": ["app/Helpers/functions.php"] 
    

Pour Laravel 5:

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    }, 
    "files": ["app/Helpers/functions.php"] 
}, 
  1. Run composer dump-autoload

Félicitations! Vous pouvez maintenant accéder à global_function_example('hello world') de n'importe quelle partie de votre application, y compris les vues Blade. J'espère que c'est utile pour quelqu'un!

+0

J'ai également besoin de créer une fonction globale où peut être appelée dans plusieurs fichiers de contrôleur. Cela semble simple mais que se passe-t-il lorsque vous lancez la commande 'composer dump-autoload'? De nouveaux fichiers ont-ils été créés? J'ai même supprimé les fichiers comme composer.json, gulpfile.js car je ne pensais pas qu'ils étaient utilisés du tout. – hijacker83

+0

Super! Lancer 'composer dump-autoload' serait similaire à l'effacement du cache du compositeur. Fondamentalement, il réévalue les classes qui doivent être chargées à partir du fichier composer.json. Bonne chance! –

+0

Méthode efficace – NaveenDA