webentwicklung-frage-antwort-db.com.de

Wie erstelle ich globale Hilfsfunktionen in laravel 5?

Wenn ich eine currentUser() -Funktion für einige oauth) Sachen machen wollte, mache ich, wo ich es in einer Ansicht oder in einem Controller verwenden kann (denke Rails, wo Sie tun helper_method: current_user im Anwendungscontroller).

Alles, was ich lese, lautet, einen Helferordner zu erstellen und die Funktion dort hinzuzufügen. Auf diese Weise können Sie Helpers::functionName Ist das der richtige Weg, dies zu tun?

Wie lassen sich Hilfsfunktionen erstellen, die in Blade-Vorlagen und -Controllern verwendet werden können?

32
TheWebs

Erstellen Sie eine neue Datei in Ihrem App/Helpers-Verzeichnis und nennen Sie sie AnythingHelper.php. Ein Beispiel für meinen Helfer ist:

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

return $result;
}

generieren Sie einen Dienstanbieter für Ihren Helfer, indem Sie den folgenden Befehl ausführen

php artisan make:provider HelperServiceProvider

fügen Sie in der Registrierungsfunktion Ihrer neu generierten HelperServiceProvider.php den folgenden Code hinzu

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

laden Sie jetzt in Ihrer config/app.php diesen Dienstanbieter und Sie sind fertig

'App\Providers\HelperServiceProvider',
68
Khan Shahrukh

Eine einfache und effiziente Methode zum Erstellen einer globalen Funktionsdatei ist das automatische Laden direkt aus Composer. Der Autoload-Abschnitt von composer akzeptiert ein files -Array, das automatisch geladen wird.

  1. Erstellen Sie eine functions.php - Datei, wo immer Sie möchten. In diesem Beispiel werden wir in app/Helpers Erstellen.

  2. Fügen Sie Ihre Funktionen hinzu, aber fügen Sie nicht eine Klasse oder einen Namespace hinzu.

    <?php
    
    function global_function_example($str)
    {
       return 'A Global Function with '. $str;
    }
    
  3. Fügen Sie in composer.json Im Abschnitt autoload die folgende Zeile hinzu:

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

    Beispiel für Laravel 5:

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": ["app/Helpers/functions.php"] // <-- Add this line
    },
    
  4. Führen Sie composer dump-autoload Aus

Getan! Sie können jetzt von jedem Teil Ihrer Anwendung aus auf global_function_example('hello world') zugreifen, einschließlich der Blade-Ansichten.

41
Arian Acosta

Laravel globale Helfer

Häufig benötigen Sie eine Dienstprogrammfunktion, auf die Sie in der gesamten Anwendung global zugreifen können. Ausgeliehen von wie laravel schreibt ihre Standard-Helfer, die Sie die Fähigkeit mit Ihren benutzerdefinierten Funktionen erweitern können.

Erstellen Sie den Helfer Datei, nicht Klasse

Ich bevorzuge eine Datei und keine Klasse, da ich mich nicht mit Namespaces beschäftigen möchte und ich möchte, dass ihre Funktionen ohne die Klassenpräfixe wie greeting('Brian'); anstelle von Helper::greeting('Brian'); zugänglich sind Laravel macht mit ihren Helfern.

File:app/Support/helper.php

Registrieren Sie die Hilfedatei mit Composer: composer.json

{
    ...
    "autoload": {
        "classmap": [
            "database"
        ],
        "files": [
            "app/Support/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    ...
}

Erstellen Sie Ihre erste Hilfsfunktion

<?php

if (!function_exists('greet')) {
    /**
     * Greeting a person
     *
     * @param  string $person Name
     * @return string
     */
    function greet($person)
    {
        return 'Hello ' . $person;
    }
}

Verwendung:

Denken Sie daran, die Datei automatisch zu laden, bevor Sie versuchen, auf ihre Funktionen zuzugreifen: composer dump-autoload

Testen wir mit Basteln

$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ΓÇö cli) by Justin Hileman
>>> greet('Brian');
=> "Hello Brian"
>>> exit
Exit:  Goodbye.

Mit Klinge

<p>{{ greet('Brian') }}</p>

Erweiterte Verwendung als Blade-Direktive:

Manchmal möchten Sie eine Blade-Direktive anstelle einer einfachen Funktion verwenden. Registrieren Sie Ihre Blade-Direktive in der Boot-Methode von AppServiceProvider: app/Providers/AppServiceProvider.php

public function boot()
{
    // ...
    Blade::directive('greet', function ($expression) {
        return "<?php echo greet({$expression}); ?>";
    });
}

Verwendung:<p>@greet('Brian')</p>

Hinweis: Möglicherweise müssen Sie die Cache-Ansichten löschen php artisan view:clear

12
bmatovu