2015-09-06 5 views
20

Wenn ich eine currentUser() Funktion für einige oauth Sachen machen wollte, bin ich dabei, wo ich es in einer Ansicht oder in einem Controller verwenden kann (denke Rails, wo Sie helper_method: current_user in der Anwendung Controller tun).Wie mache ich globale Hilfsfunktionen in Laravel 5?

Alles, was ich lese, um einen Helfer Ordner zu erstellen und fügen Sie die Funktion dort und dann auf diese Weise können Sie tun Helpers::functionName Ist dies der richtige Weg, dies zu tun?

Was ist der "Laravel-Weg" zum Erstellen von Hilfsfunktionen, die in Blade-Vorlagen und Controllern verwendet werden können?

+0

Vielleicht hilft das: http://stackoverflow.com/questions/28290332/best-practices-for-custom-helpes-on-laravel-5 – Iamzozo

Antwort

46

Erstellen Sie eine neue Datei in Ihrem app/Helpers Verzeichnisnamen es Ein Beispiel für mein Helfer AnythingHelper.php ist:

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

return $result; 
} 

einen Dienstleister für Ihre Helfer erzeugen, indem sie Befehl folgende

php artisan make:provider HelperServiceProvider 

in der Registerfunktion Ihrer neu generierten HelperServiceProvider.php folgenden Code hinzufügen

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

jetzt in Ihrer config/app.php diesen Service Provider laden und Sie

'App\Providers\HelperServiceProvider', 
+0

Wie verwenden Sie das in Blade. Müssen Sie Fassade registrieren? – MaXi32

+1

Nein, nur der oben erwähnte Code tut es, in deiner Blade-Datei {{yourHelperFunction ('param')}} –

+0

Ich wünschte, ich könnte die Hilfsfunktion mit Helper :: myHelperFunction ('param') in Blade aufrufen. Es sieht schöner aus. Weißt du, wie man das registriert? – MaXi32

18

Eine weitere effiziente Art und Weise getan automatisch zu laden eine globale Funktionen Datei zu erstellen ist es direkt vom Komponisten. Der Autoload-Abschnitt von Composer akzeptiert ein files Array, das automatisch geladen wird.

  1. erstellen functions.php Datei, wo immer Sie mögen, in diesem Beispiel haben wir es in app/Helpers erstellen werden.

  2. Ihre Funktionen hinzufügen, aber tun nicht eine Klasse oder Namespace hinzuzufügen.

    <?php 
    
    function global_function_example($str) 
    { 
        return 'A Global Function with '. $str; 
    } 
    
  3. In composer.json im Inneren des autoload Abschnitt die folgende Zeile:

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

Für Laravel 5:

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

Herzlichen Glückwunsch! Sie können jetzt auf global_function_example('hello world') einen beliebigen Teil Ihrer Anwendung einschließlich der Blade-Ansichten zugreifen.

Ich hoffe, dass dies für jemanden nützlich ist!

+0

Ich muss auch eine globale Funktion erstellen, wo in mehreren Controller-Dateien aufgerufen werden kann. Das sieht einfach aus, aber was passiert, wenn Sie den Befehl 'composer dump-autoload' ausführen? Wurden neue Dateien erstellt? Ich löschte sogar die Dateien wie composer.json, gulpfile.js, da ich nicht glaubte, dass sie überhaupt verwendet wurden. – hijacker83

+0

Großartig! Das Ausführen von 'composer dump-autoload' würde dem Löschen des Composer-Caches ähneln. Grundsätzlich wertet es die Klassen aus, die aus der composer.json-Datei geladen werden müssen. Viel Glück! –

+0

Effiziente Methode – NaveenDA