Jak stworzyć globalne funkcje pomocnicze w laravel 5?

Jeśli chciałem zrobić currentUser() funkcję dla niektórych rzeczy oauth robię, gdzie mogę jej używać w widoku lub w kontrolerze (think rails, gdzie robisz helper_method: current_user w kontrolerze aplikacji).

Wszystko, co czytam Stany, aby utworzyć folder helpers i dodać tam funkcję, a następnie w ten sposób można to zrobić Helpers::functionName Czy to jest dobry sposób na to?

Jaki jest "laravelowy sposób" tworzenia funkcji pomocniczych, które mogą być używane w szablonach blade i kontrolerach?

Author: TheWebs, 2015-09-06

3 answers

Utwórz nowy plik w katalogu app / Helpers o nazwie it AnythingHelper.php Przykład mojego pomocnika to:

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

return $result;
}

Wygeneruj dostawcę usług dla swojego pomocnika, wykonując polecenie

php artisan make:provider HelperServiceProvider

W funkcji rejestru nowo wygenerowanego HelperServiceProvider.php Dodaj następujący kod

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

Teraz w konfiguracji/aplikacji.php załaduj tego dostawcę usług i gotowe

'App\Providers\HelperServiceProvider',
 59
Author: Khan Shahrukh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-19 09:09:48

Innym efektywnym sposobem tworzenia globalnego pliku funkcji jest automatyczne ładowanie go bezpośrednio z composera. Sekcja autoload programu composer przyjmuje tablicę files, która jest ładowana automatycznie.

  1. Utwórz plik functions.php gdziekolwiek chcesz, w tym przykładzie utworzymy go wewnątrz app/Helpers.

  2. Dodaj swoje funkcje, ale czy Nie Dodaj klasę lub Przestrzeń nazw.

    <?php
    
    function global_function_example($str)
    {
       return 'A Global Function with '. $str;
    }
    
  3. W composer.json wewnątrz sekcji autoload Dodaj następujący wiersz:

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

Dla Laravel 5:

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

Gratulacje! Możesz teraz uzyskać dostęp do formularza global_function_example('hello world') z dowolnej części aplikacji, w tym widoków Blade.

Mam nadzieję, że jest to przydatne dla kogoś!

 26
Author: Arian Acosta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 00:29:09

Laravel global helpers

Często znajdziesz siebie w potrzebie funkcji użytkowej, która jest dostęp globalnie w całej aplikacji. Pożyczając od tego, jak Laravel pisze swoje domyślne helpery, możesz rozszerzyć tę zdolność za pomocą niestandardowych funkcji.

Tworzy plik helper , a nie klasę

Wolę plik, a nie klasę, ponieważ nie chcę zawracać sobie głowy przestrzeniami nazw i chcę, aby jego funkcje były dostępne bez klasy przedrostki takie jak: greeting('Brian'); zamiast Helper::greeting('Brian');, tak jak Laravel robi z ich pomocnikami.

Plik: app/Support/helper.php

Zarejestruj plik pomocniczy za pomocą Composera: composer.json

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

Utwórz swoją pierwszą funkcję pomocniczą

<?php

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

Użycie:

Pamiętaj o automatycznym ładowaniu pliku przed próbą uzyskania dostępu do jego funkcji: composer dump-autoload

Let ' s test with Tinker

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

Z Ostrzem

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

Zaawansowane użycie jako ostrze dyrektywa:

Czasami będziesz chciał użyć dyrektywy blade zamiast zwykłej funkcji. Rejestracja dyrektywy Blade w metodzie rozruchowej AppServiceProvider: app/Providers/AppServiceProvider.php

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

Sposób użycia: <p>@greet('Brian')</p>

Uwaga: może być konieczne wyczyszczenie widoków pamięci podręcznej php artisan view:clear

 5
Author: bmatovu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 07:02:59