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?
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',
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.
Utwórz plik
functions.php
gdziekolwiek chcesz, w tym przykładzie utworzymy go wewnątrzapp/Helpers
.-
Dodaj swoje funkcje, ale czy Nie Dodaj klasę lub Przestrzeń nazw.
<?php function global_function_example($str) { return 'A Global Function with '. $str; }
-
W
composer.json
wewnątrz sekcjiautoload
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"]
},
- 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ś!
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
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