Laravel - przydatne funkcje, o których nie każdy wie
Laravel jest frameworkiem bardzo rozbudowanym, dającym użytkownikowi wiele narzędzi i możliwości do pracy nad projektem. Postanowiłem przedstawić Wam dzisiaj kilka mniej znanych, ale za to bardzo przydatnych możliwości udostępnionych nam przez twórców. Mam nadzieję, że wpłyną one pozytywnie na intuicyjność i szybkość pisania kodu.
1. Metody Scheduler mogą być chainowane w większej ilości
Wykonywanie zadań cyklicznych jest czymś esencjonalnym w przypadku większości projektów aplikacji webowych. Laravel wychodzi naprzeciw tego zapotrzebowania w postaci swojego "Task Schedulingu". Rozwiązanie to wykonane jest w bardzo rozbudowany, ale i zarazem przyjazny sposób.
// Co godzinę, w dni robocze, pomiędzy 8:00 a 17:00...
$schedule->command('foo')
->weekdays()
->hourly()
->between('8:00', '17:00');
Wszystkie logicznie poprawne chainy tego typu będą tutaj działać prawidłowo. Jest to bardzo eleganckie i wyjątkowo wygodne rozwiązanie.
Możliwe jest również stworzenie bardziej złożonego zadania w innej klasie i przekazanie go do naszego polecenia.
// Co godzinę, w dni robocze, pomiędzy 8:00 a 17:00, jeżeli metoda shouldSkip() zwróci true...
$schedule->command('foo')
->weekdays()
->hourly()
->between('8:00', '17:00')
->skip(function () {
return app('SkipValidator')->shouldSkip();
});
Tego typu uproszczenia są kluczową częścią idei stojącej za tym frameworkiem. Więcej o jego unikalności możecie przeczytać w naszym artykule porównującym frameworki Laravel i Symfony - główne różnice.
2. Eloquent - metoda find() przyjmuje wiele parametrów
Metoda find() może być wykorzystana do pobrania większej ilości rekordów. Aby to osiągnąć, wystarczy jako argument przekazać tablicę. Metoda zwróci w takim przypadku kolekcje modeli Eloquent z podanymi id (oczywiście jeżeli takowe istnieją). Choć może to wydawać się proste i oczywiste, często spotykam się z kodem, w którym ktoś ewidentnie o tym zapomniał.
// Znajdź użytkownika o id równym 1.
$data = UserModel::find(1)
// Znajdź użytkowników z id równymi 1, 2, 3, 4, 5.
$data = UserModel::find([1,2,3,4,5])
3. Query builder na kilku kolumnach w łatwy sposób
Weźmy tutaj przykładowe zapytanie SQL
SELECT
*
from
`users`
WHERE
`name` = 'developer'
AND `email` = '[email protected]'
LIMIT
1
Przy użyciu Eloquent zapytanie możemy uprościć i przedstawić w takiej formie:
\App\User::whereNameAndEmail('developer','[email protected]')->first();
// Powyższy przykład jest uproszczoną wersją zapisów poniżej.
\App\User::where('name', 'developer')->where('email', '[email protected]')->first();
\App\User::where(['name' => 'developer', 'email' => '[email protected]'])->first();
Rozwiązanie działa zarówno z operatorem "and" jak i "or".
\App\User::whereNameOrEmail('developer','[email protected]')->first();
Po raz kolejny uwypukla się tutaj intuicyjność i "prostota" kodu pisanego w Laravel.
4. Załączanie plików do wiadomości email
Niezależnie od narzędzia z jakiego korzystamy, wysyłanie wiadomości e-mail wraz załącznikami i zdjęciami często okazuje się zadaniem bardziej złożonym i skomplikowanym, niż być powinno. Laravel w tym temacie trzyma się zdecydowanie reguły KISS.
Załóżmy, że do naszej wiadomości chcemy dołączyć plik "tajny_dokument_1.pdf", znajdujący się pod ścieżką "/tajne_dokumenty/tajny_dokument_1.pdf".
Mail::send('emails.secret', [], function ($mail) {
$mail->to('[email protected]');
$mail->subject('Tajne dokumenty o które prosiłeś');
$mail->attach(public_path('tajne_dokumenty/tajny_dokument_1.pdf'));
});
Podobnie się sprawy mają z dodawaniem zdjęć w treści maila.
Zdjęcie o które prosiłeś:
<img src="{{ $message->embed(public_path('img/zdjecie.jpg')) }}">
Dzięki!
5. Oryginalne wartości atrybutu
Po wprowadzeniu zmian do rekordu Eloquent jesteśmy w stanie sprawdzić jego oryginalną wartość.
$user = App\User::first();
// Oryginalna wartość pola mail -> [email protected]
$user->mail;
// Ustawiamy nową wartość dla tego pola.
$user->mail = '[email protected]';
// Pole to zwracać będzie teraz jego nową wartość -> [email protected]
$user->mail;
// Korzystając z metody getOriginal() jesteśmy w stanie dostać się do wartości oryginalnej.
// W tym przypadku zwróci wartość -> [email protected]
$user->getOriginal('mail');
// Jesteśmy również w stanie pobrać cały oryginalny obiekt.
$user->getOriginal();
6. Sprawdzanie czy model uległ zmianie
Podobnie jak w przypadku punktu poprzedniego, jesteśmy w stanie stwierdzić, czy w naszym obiekcie zaszły zmiany. Przygotowana została do tego celu przez twórców Laravel specjalna metoda isDirty(). Rozbudujmy nasz wcześniejszy przykład o jej implementację.
$user = App\User::first();
// Oryginalna wartość pola mail -> [email protected]
$user->mail;
// Metoda zwróci 'false' gdyż pracujemy na świeżo pozyskanym obiekcie z bazy.
$user->isDirty();
// Ustawiamy nową wartość dla tego pola.
$user->mail = '[email protected]';
// Metoda zwróci 'true' gdyż przed chwilą zmieniliśmy wartość dla pola mail
$user->isDirty();
// Możemy pójść o krok dalej i sprawdzać zmiany dla poszczególnych pól.
// Zwróci 'true'.
$user->isDirty('mail');
// Zwróci 'false'.
$user->isDirty('name');
// Pole to zwracać będzie teraz jego nową wartość -> [email protected]
$user->mail;
// Korzystając z metody getOriginal() jesteśmy w stanie dostać się do wartości oryginalnej.
// W tym przypadku zwróci wartość -> [email protected]
$user->getOriginal('mail');
// Jesteśmy również w stanie pobrać cały oryginalny obiekt.
$user->getOriginal();
Podsumowanie
Laravel jest frameworkiem bardzo rozbudowanym, dającym developerom dużo swobody i możliwości. Zapewnia on również wiele funkcjonalności, o których istnieniu nie każdy musi wiedzieć. Przedstawione przeze mnie funkcje stanowią jedynie ułamek wszystkich możliwości, jakie oferuje nam system i z których korzystamy na co dzień w naszej agencji PHP development.