Domyślnie w Laravelu mamy do dyspozycji mnóstwo przydatnych globalnych funkcji czyli tak zwanych helperów, takich jak trans()
, route()
, view()
czy dd()
.
Często zdarza się, że w projekcie potrzebujemy własnych funkcji dostępnych globalnie. Możemy poinstruować mechanizm autoloadingu Composera, żeby ładował, przy każdym zapytaniu wskazany przez nas plik z funkcjami.
Zacznijmy od stworzenia pliku z funkcjami. Możemy go nazwać dowolnie i umieścić w dowolnym miejscu naszej aplikacji. Ja wybieram nazwę pliku helpers.php
i umieszczam go w katalogu app
.
Zastanówmy się nad przydatną funkcją. W składzie tekstu w języku polskim nie należy pozostawiać na końcu wiersza wyrazów jednoliterowych. Te pozostawione na końcu wiersza wyrazy nazywa się sierotami. Dodajmy w pliku app/helpers.php
prostą funkcję, która zamienia w tekście spacje występujące po wyrazach jednoliterowych na spacje niełamiące:
// app/helpers.php
function sieroty($string)
{
return preg_replace('/ ([a-z]) /i', ' $1 ', $string);
}
Używamy funkcji PHP preg_replace
z prostym wyrażeniem regularnym. Każde słowo jednoliterowe otoczone spacjami zostanie zamienione na to samo słowo, z tą różnicą że spacja po nim zostanie zamieniona na niełamiącą.
W pliku composer.json
mamy zdefiniowane pole autoload
, w którym instruujemy autoloader gdzie ma szukać odpowiednich klas i funkcji:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
Możemy dodać klucz files
, który jest tablicą ścieżek do plików, które chcemy załadować. Dodajmy tam ścieżkę do naszego pliku app/helpers.php
:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"files": [
"app/helpers.php"
],
"psr-4": {
"App\\": "app/"
}
},
By przeładować autoloader, wykonajmy w terminalu komendę:
composer dump-autoload
Od teraz plik app/helpers.php
będzie ładowany, przy każdym zapytaniu. Funkcja sieroty()
będzie dostępna w dowolnym miejscu aplikacji.
Przeczytajcie więcej o mechanizmie autoloadera tutaj. Dajcie znać w komentarzach jakie przydatne funkcje definiujecie w swoich aplikacjach.