Laravel Intuitiveness Of Writing Code

Laravel – intuicyjność oraz szybkość pisania kodu

Laravel i Symfony to dwa frameworki, które są bardzo często porównywane, a na forach jest wiele dyskusji na ich temat. Dzisiaj jednak nie chcę się skupić na porównaniu, lecz na pokazaniu zalet Laravela oraz opisaniu tego, co wywołało na mnie największe, pozytywne oczywiście wrażenie.

Artisan twoim najlepszym przyjacielem

Aritsan jest CLI dołączonym do Laravela. To właśnie dzięki niemu możemy w szybki sposób, za pomocą odpowiedniej komendy wykonać wiele czynności, które normalnie mogłyby nam zająć sporo czasu. Jakie są to czynności? O tym opowiem poniżej.

Frontend presets / Laravel UI

Konfigurowanie odpowiedniej technologii frontendowej może zająć sporo czasu, szczególnie jeśli robimy to po raz pierwszy. Korzystając z Laravela na starcie, możemy posłużyć się trzema dostępnymi presetami: bootstrap, vue lub react. Za pomocą wcześniej wspomnianego artisana możemy w szybki sposób wybrać, której technologii będziemy używać w projekcie. Na potrzeby tego przykładu załóżmy, że potrzebujemy reacta. Do wersji 5 Laravela wystarczyła do tego jedna komenda:

php artisan preset react

Od wersji 6 najpierw należy zainstalować pakiet Laravel UI za pomocą composera:

composer require laravel/ui

a następnie wybrać odpowiedni dla naszego projektu zestaw np.:

php artisan ui react

Jednak to nie wszystko, bowiem nie jesteśmy ograniczeni tylko do tych trzech technologii. Możemy dodać własne presety (np. tailwindcss), a na githubie znajdziemy wiele przykładów, jak to zrobić.

Uwierzytelnianie

Każda obecnie tworzona aplikacja musi posiadać system logowania, rejestracji użytkowników oraz odzyskiwania hasła. Tworzenie wszystkiego od zera nie ma najmniejszego sensu. Można też skorzystać z gotowych rozwiązań, jednak w przypadku Laravela bardziej już uprościć sprawy się nie dało.

Do wersji 5 wystarczyła tylko jedna komenda:

php artisan make:auth

Od wersji 6 ponownie trzeba posłużyć się pakietem Laravel UI

php artisan ui:auth

Powyższa komenda utworzy nam odpowiednie ścieżki w routingu, controllery oraz widoki dla osób zalogowanych i niezalogowanych. Jeśli jednak i to jest dla nas mało, możemy dodatkowo utworzyć też formularze logowania, rejestracji oraz odzyskiwania hasła:

php artisan ui react –auth

Eloquent

To chyba największa zaleta Laravela. Eloquent jest to ORM oparty na modelu ActiveRecord. Pozwala w bardzo intuicyjny sposób współpracować z bazą danych. Dzięki niemu zapomnimy o pisaniu surowych zapytań SQL, a praca z bazą staje się niesamowicie przyjemna. Spójrzmy na kilka poniższych przykładów:

User::where(‘first_name’, ‘Andrzej’)→orderBy(‘last_name’, ‘DESC’)→get();

Powyższy kod właściwie nie wymaga komentarza: Pobierz użytkowników, których imię to Andrzej i posortuj wyniki według nazwiska. Jeśli natomiast zamiast listy wszystkich użytkowników potrzebujemy tylko pierwszego wyniku, wystarczy get() zamienić na first():

User::where(‘first_name’, ‘Andrzej’)→orderBy(‘last_name’, ‘DESC’)→first();

Również często będziemy potrzebowali wyświetlić stronę 404 w przypadku, gdy nie znajdziemy w bazie żadnego rekordu. W tym wariancie należy po prostu zamienić where na findOrFail

User::findOrFail(‘first_name’, ‘Andrzej’)→orderBy(‘last_name’, ‘DESC’)→get();

Powyższe przykłady to tylko skrawek tego co potrafi Eloquent. Równie łatwo możemy tworzyć, edytować lub usuwać rekordy w bazie. Możliwe jest również tworzenie relacji między tabelami: jeden do jednego, jeden do wielu czy wielu do wielu.

Migracje

Jako kolejny przykład przedstawię tworzenie, edycję oraz usuwanie tabel w bazie danych. Załóżmy, że potrzebujemy utworzyć nową tabelę z produktami, które będą znajdowały się w sklepie. Do tego celu będziemy potrzebowali również modelu, który będzie odpowiedzialny za obsługę danych. Całość tworzymy za pomocą jednej komendy:

php artisan make:model Product –migration

W katalogu app/models (lub app w przypadku laravela 7 lub starszego) zostanie utworzony model Product.php. Flaga – migration oznacza, że dodatkowo dla tego modelu utworzyliśmy migrację, która znajduje się w katalogu database/migrations. W metodzie up() definiujemy nazwę tabeli oraz typ danych. Na przykład:

public function up()

{

   Schema::create('products', function (Blueprint $table) {

      $table->id();

      $table->string('name');

      $table->text('description');

      $table->float('price');

      $table->integer('stock');

      $table->tinyInteger('isActive');

      $table->timestamps();

   });

}

Metoda timestamps utworzy nam dodatkowe kolumny created_at oraz updated_at, które automatycznie będą się uzupełniały odpowiednimi danymi w chwili utworzenia lub zmiany rekordu.

Na koniec, aby utworzyć powyższą tabelę w bazie, należy wykonać:

php artisan migrate

lub

php artisan migrate:fresh

aby usunąć wszystkie dotychczasowe dane i utworzyć na nowo całą strukturę tabel.

Warto tutaj dodać, że nazwa tabel została utworzona na podstawie modelu (Product) i automatycznie zmieniona z liczby pojedynczej na liczbę mnogą (products).

Database seeders

W trakcie tworzenia aplikacji w ramach usług PHP developmentu, spotykamy się z potrzebą uzupełnienia bazy testowymi danymi, m.in. takimi jak: użytkownicy, wpisy na blogu, czy produkty w sklepie. Znakomicie do tego celu sprawdza się biblioteka PHP Faker, jednak i w tym przypadku twórcy Laravela poszli o krok dalej i przedstawiają gotowe rozwiązania. Dla przykładu przyjmijmy, że potrzebujemy utworzyć w bazie danych stu użytkowników.

Na początku musimy stworzyć database factory za pomocą komendy:

php artisan make:factory UserFactory -m User

Jeśli przejdziemy do ścieżki database/factory zobaczymy, że powstał nowy plik UserFactory.php. To w nim, a konkretnie w metodzie definition() będziemy definiować jakie pola oraz jakie dane w tabeli users będziemy wypełniać.

public function definition()

   {

      return [

         'first_name' => $this→faker→firstName,

         'last_name' => $this->faker->lastName,

         'email' => $this->faker->unique()->safeEmail,

         'email_verified_at' => now(),

         'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',

// password

         'remember_token' => Str::random(10),

      ];

   }

Oczywiście nazwa kluczy w tabeli musi odpowiadać nazwom kolumn w tabeli w bazie danych.

Kolejnym krokiem jest stworzenie seedera. Ponownie do tego celu posłuży nam artisan.

php artisan make:seeder UsersTableSeeder

W nowo utworzonym pliku database/seeders/UsersTableSeeder.php musimy już tylko zdefiniować, ilu użytkowników ma zostać utworzonych.

public function run()

{

   \App\Models\User::factory()->count(100)->create();

}

Na koniec w pliku database/seeders/DatabaseSeeder.php musimy dodać:

public function run()

   {

      $this->call(UsersTableSeeder::class);

   }

I gotowe! Seeder uruchamiamy oczywiście za pomocą artisana:

php artisan db:seed

Wiadomości e-mail

Konfiguracja oraz stylowanie dobrze wyglądających wiadomości e-mail to praca na wiele godzin. Jednak i tutaj sprawy zostały maksymalnie uproszczone. Zacznijmy oczywiście od komendy:

php artisan make:mail HelloWorldMail –markdown emails.hello-world

Dzięki niej zostały utworzone dwa pliki. Po pierwsze: jeśli przejdziemy do resources/views/mails/hello-world/blade.php, to możemy edytować naszą wiadomość e-mail. Po drugie: została utworzona klasa \App\Mail\HelloWorldMail, którą należy użyć, chcąc wysłać wiadomość. Tam również możemy przekazać zmienne do widoku hello-word.blade.php takie jak np. nazwa użytkownika, do którego wysyłamy wiadomość.

Integracja z mialgun czy mailtrap również jest bardzo prosta. W przypadku tego drugiego wystarczy po prostu podać login oraz hasło w pliku .env.

Telescope

Na koniec przedstawię znakomite narzędzie pozwalające debugować oraz optymalizować naszą aplikację. Dzięki Telescope możemy zobaczyć, co tak naprawdę dzieje się „w tle” podczas pracy Laravela. Telescope instalujemy za pomocą trzech komend:

composer require laravel/telescope
php artisan telescope:install
php artisan migrate

Teraz wystarczy przejść pod adres /telescope i będziemy mieli wgląd do requestów, komend wykonanych za pomocą artisana, błędów, logów, zapytań do bazy danych i wiele innych. Polecam każdemu spędzić trochę więcej czasu na zapoznanie się z tym narzędziem.

telescope leszek

Podsumowanie

W naszej agencji wykorzystujemy bardzo często, tym bardziej cieszy, że jak można zobaczyć na powyższych przykładach, wiele czasochłonnych procesów podczas tworzenia aplikacji zostało uproszczonych do minimum, a sprawne pisanie kodu sprowadza się głównie do znajomości komend artisana, który większość rzeczy zrobi za nas. Również dokumentacja Laravela została przygotowana w bardzo prosty i przejrzysty sposób, a na forach takich jak stackoverflow czy laracasts można znaleźć wiele pomocnych wątków.

Poniżej przedstawiam odnośniki do dokumentacji poszczególnych aspektów omawianych w tym artykule:

Artisan

Presets

Uwierzytelnianie

Eloquent

Migracje

Seedery

Factory

Wiadomości email

Telescope

3. Najlepsze praktyki zespołów programistycznych