🢂Generowanie komponentów aplikacji w Laravel przy użyciu Artisan
Dowiedz się, jak wykorzystać narzędzie Artisan do generowania kluczowych komponentów aplikacji Laravel, takich jak kontrolery, modele, migracje i seedery.
Artisan znacząco upraszcza proces tworzenia kluczowych komponentów aplikacji Laravel, takich jak kontrolery, modele, migracje i seedery. W tym artykule omówimy wszystkie najważniejsze polecenia związane z generowaniem komponentów, które przyspieszą Twoją pracę z Laravel.
Kontrolery
Kontrolery w Laravel służą do obsługi przychodzących żądań HTTP i koordynowania logiki aplikacji. Do tworzenia nowych kontrolerów służy polecenie php artisan make:controller [NazwaKontrolera]
, które generuje nowy plik kontrolera w katalogu app/Http/Controllers
. Przykładowo, php artisan make:controller UserController
utworzy plik UserController.php
.
Polecenie make:controller
oferuje kilka przydatnych opcji. Opcja --resource
lub -r
powoduje wygenerowanie kontrolera zasobów, który zawiera predefiniowane metody dla typowych operacji CRUD (Create, Read, Update, Delete). Przykład użycia: php artisan make:controller PostController --resource
. Kontrolery zasobów znacząco przyspieszają tworzenie interfejsów API oraz systemów zarządzania danymi, dostarczając gotowe metody, które są często wykorzystywane. Bez tej opcji, programista musiałby ręcznie definiować każdą z tych metod (index, create, store, show, edit, update, destroy), co czyni tę opcję niezwykle wygodną i oszczędzającą czas.
Dla aplikacji typu API, gdzie kontrolery zazwyczaj zwracają dane w formatach takich jak JSON lub XML zamiast renderować widoki HTML, przydatna jest opcja --api
. Polecenie php artisan make:controller Api\UserController --api
tworzy kontroler API, który dziedziczy z klasy bazowej App\Http\Controllers\Controller
bez metod odpowiedzialnych za renderowanie widoków. Ta opcja pomaga w utrzymaniu czystej architektury aplikacji poprzez wyraźne oddzielenie logiki aplikacji webowej od logiki interfejsu API.
W sytuacjach, gdy kontroler ma wykonywać tylko jedną konkretną akcję, można skorzystać z opcji --invokable
. Polecenie php artisan make:controller ProvisionServer --invokable
tworzy kontroler z pojedynczą metodą __invoke()
. Jest to szczególnie przydatne dla prostych akcji, takich jak obsługa formularza lub pojedyncze zapytanie API, gdzie kontroler inwokowalny może znacząco uprościć strukturę kodu, czyniąc go bardziej zwięzłym i łatwiejszym do zrozumienia.
Często kontrolery są ściśle powiązane z konkretnymi modelami Eloquent. Opcja -m
lub --model
pozwala na utworzenie kontrolera powiązanego z określonym modelem. Przykładowo, php artisan make:controller UserController --model=User
utworzy kontroler UserController
, który będzie domyślnie korzystał z modelu User
. Dodatkowo, można połączyć tę opcję z --resource
lub --api
, aby od razu wygenerować kontroler zasobów lub kontroler API dla danego modelu. Model często wymaga kontrolera do obsługi żądań związanych z jego danymi, a ta opcja automatycznie generuje podstawowy kontroler, który można następnie dostosować do specyficznych potrzeb.
Przykłady użycia kontrolerów
Poniższy przykład pokazuje, jak za pomocą polecenia make:controller
utworzyć kontroler UserController
z metodami CRUD dla modelu User
:
php artisan make:controller UserController --model=User
Oto kilka dodatkowych przykładów tworzenia kontrolerów:
# Tworzenie kontrolera zasobów dla zarządzania postami
php artisan make:controller PostController --resource
# Tworzenie kontrolera API dla zarządzania komentarzami
php artisan make:controller Api/CommentController --api
# Tworzenie kontrolera inwokowalnego do obsługi jednorazowych akcji
php artisan make:controller ProcessPaymentController --invokable
# Tworzenie kontrolera w zagnieżdżonym katalogu
php artisan make:controller Admin/DashboardController
# Tworzenie kontrolera zasobów z powiązanym modelem i migracją
php artisan make:controller ProductController --model=Product --migration
Modele
Modele Eloquent w Laravel reprezentują tabele w bazie danych i służą do interakcji z zapisanymi w nich danymi. Do tworzenia nowych modeli służy polecenie php artisan make:model [NazwaModelu]
, które generuje nowy plik modelu w katalogu app/Models
. Przykładowo, php artisan make:model User
utworzy plik User.php
.
Podobnie jak w przypadku kontrolerów, polecenie make:model
oferuje szereg użytecznych opcji. Często model i odpowiadająca mu tabela w bazie danych są tworzone równocześnie. Opcja -m
lub --migration
pozwala na jednoczesne utworzenie pliku migracji dla powiązanej tabeli bazy danych. Użycie polecenia php artisan make:model Product -m
spowoduje utworzenie zarówno modelu Product
, jak i pliku migracji do stworzenia tabeli products
. Tworzenie modelu bez powiązanej tabeli w bazie danych byłoby bezcelowe, dlatego ta opcja zapewnia, że podczas tworzenia modelu generowany jest również plik migracji definiujący strukturę tabeli.
W wielu przypadkach dla danego modelu potrzebny jest również podstawowy kontroler do zarządzania nim. Opcja -c
lub --controller
umożliwia utworzenie kontrolera powiązanego z modelem. Przykładowo, php artisan make:model Category -c
utworzy model Category
oraz kontroler CategoryController
. Opcję tę można łączyć z --resource
lub --api
, aby od razu wygenerować kontroler zasobów lub kontroler API dla danego modelu. Model często wymaga kontrolera do obsługi żądań związanych z jego danymi, a ta opcja automatycznie generuje podstawowy kontroler, który można następnie dostosować do specyficznych potrzeb.
Dla szybkiego tworzenia kompletnego zestawu plików potrzebnych do zarządzania zasobem w aplikacji, niezwykle przydatna jest opcja -a
lub --all
. Polecenie php artisan make:model Order -a
wygeneruje model Order
, plik migracji dla tabeli orders
, seeder do wypełniania tabeli danymi testowymi, fabrykę do generowania instancji modelu oraz kontroler zasobów OrderController
. Podczas tworzenia nowego zasobu, takiego jak produkt, użytkownik czy zamówienie, zazwyczaj potrzebne są wszystkie te pliki. Opcja -a
pozwala na ich wygenerowanie za jednym razem, co znacząco przyspiesza pracę.
Dodatkowo, polecenie make:model
oferuje opcje -f, --factory
do tworzenia nowej fabryki dla modelu, -s, --seed
do tworzenia nowego seedera dla modelu oraz --policy
do tworzenia nowej polityki autoryzacji dla modelu. Opcje --pivot
i --morph-pivot
wskazują, czy wygenerowany model powinien być niestandardowym modelem tabeli pośredniej dla relacji many-to-many lub polimorficznych relacji many-to-many.
Przykłady użycia modeli
Poniższy przykład pokazuje, jak za pomocą polecenia make:model
utworzyć model Product
z fabryką, seederem, kontrolerem zasobów i migracją:
# Tworzenie modelu z migracją, kontrolerem, seederem i fabryką
php artisan make:model Product -m -c -s -f
# Alternatywnie, można użyć skrótu -a (all)
php artisan make:model Product -a
# Tworzenie modelu tylko z migracją
php artisan make:model Category -m
# Tworzenie modelu z kontrolerem zasobów
php artisan make:model Post -c -r
# Tworzenie modelu dla tabeli pośredniej
php artisan make:model RoleUser --pivot
# Tworzenie modelu z polityką autoryzacji
php artisan make:model Article --policy
Migracje
Migracje w Laravel pozwalają na zarządzanie strukturą bazy danych w sposób kontrolowany i powtarzalny. Do tworzenia nowych migracji służy polecenie php artisan make:migration
, które generuje nowy plik migracji w katalogu database/migrations
. Nazwa migracji powinna zawierać zwięzły opis zmiany, którą wprowadza, na przykład create_users_table
lub add_votes_to_posts_table
.
Polecenie make:migration
oferuje kilka opcji ułatwiających tworzenie typowych migracji. Opcja --create=[nazwa_tabeli]
generuje migrację do tworzenia nowej tabeli o określonej nazwie. Przykładowo, php artisan make:migration create_products_table --create=products
utworzy migrację z gotowym szkieletem do tworzenia tabeli products
. Opcja --table=[nazwa_tabeli]
generuje migrację do modyfikacji istniejącej tabeli. Na przykład, php artisan make:migration add_category_id_to_products --table=products
utworzy migrację do modyfikacji tabeli products
.
Do wykonywania migracji służy polecenie php artisan migrate
, które uruchamia wszystkie oczekujące migracje. Polecenie to oferuje szereg opcji, takich jak --force
do wymuszenia migracji w środowisku produkcyjnym bez interaktywnego potwierdzenia, --step
do wykonywania migracji krok po kroku, --path=[ścieżka]
do określenia niestandardowej ścieżki plików migracji oraz --pretend
do symulacji migracji bez faktycznego wykonywania operacji na bazie danych.
Przykłady użycia migracji
Oto kilka praktycznych przykładów pracy z migracjami:
# Tworzenie migracji do utworzenia nowej tabeli
php artisan make:migration create_products_table --create=products
# Tworzenie migracji do modyfikacji istniejącej tabeli
php artisan make:migration add_category_id_to_products --table=products
# Uruchomienie wszystkich oczekujących migracji
php artisan migrate
# Uruchomienie migracji z określonej ścieżki
php artisan migrate --path=database/migrations/specific_folder
# Cofnięcie ostatniej operacji migracji
php artisan migrate:rollback
# Cofnięcie wszystkich migracji
php artisan migrate:reset
# Cofnięcie wszystkich migracji i ponowne ich uruchomienie
php artisan migrate:refresh
# Usunięcie wszystkich tabel i ponowne uruchomienie wszystkich migracji
php artisan migrate:fresh
# Symulacja uruchomienia migracji (bez faktycznego wykonania)
php artisan migrate --pretend
# Sprawdzenie statusu migracji
php artisan migrate:status
Seedery
Seedery w Laravel służą do wypełniania tabel w bazie danych danymi testowymi. Do tworzenia nowych seederów służy polecenie php artisan make:seeder [NazwaSeedera]
, które generuje nowy plik seedera w katalogu database/seeders
. Przykładowo, php artisan make:seeder UsersTableSeeder
utworzy plik UsersTableSeeder.php
.
Do uruchamiania seederów służy polecenie php artisan db:seed
, które uruchamia główny seeder DatabaseSeeder
. Aby uruchomić konkretny seeder, można użyć opcji --class=[NazwaSeedera]
. Na przykład, php artisan db:seed --class=UsersTableSeeder
uruchomi tylko seeder UsersTableSeeder
.
Przykłady użycia seederów
Oto kilka praktycznych przykładów pracy z seederami:
# Tworzenie nowego seedera
php artisan make:seeder ProductsTableSeeder
# Uruchomienie wszystkich seederów
php artisan db:seed
# Uruchomienie konkretnego seedera
php artisan db:seed --class=ProductsTableSeeder
# Uruchomienie seederów dla konkretnej bazy danych
php artisan db:seed --database=mysql_testing
# Uruchomienie seedera bez interaktywnego potwierdzenia
php artisan db:seed --force
# Utworzenie modelu z seederem
php artisan make:model Order -s
# Odświeżenie migracji i uruchomienie seederów
php artisan migrate:fresh --seed
# Uruchomienie seedera w środowisku produkcyjnym
php artisan db:seed --force --env=production
Fabryki
Fabryki (factories) w Laravel służą do generowania dużych ilości danych testowych w sposób spójny i zdefiniowany. Nowy plik fabryki tworzy się za pomocą polecenia php artisan make:factory
, które generuje plik w katalogu database/factories
. Przykładowo, php artisan make:factory ProductFactory
utworzy plik ProductFactory.php
.
Polecenie make:factory
posiada opcję --model=[nazwa_modelu]
, która automatycznie konfiguruje fabrykę do pracy z określonym modelem. Na przykład, php artisan make:factory PostFactory --model=Post
utworzy fabrykę powiązaną z modelem Post
.
Fabryki są często używane w seederach lub testach do szybkiego generowania danych testowych, co jest szczególnie przydatne w środowiskach developerskich i testowych.
Przykłady użycia fabryk
Oto kilka praktycznych przykładów pracy z fabrykami:
# Tworzenie nowej fabryki dla modelu User
php artisan make:factory UserFactory --model=User
# Tworzenie fabryki bez powiązanego modelu
php artisan make:factory CommentFactory
# Tworzenie modelu z fabryką
php artisan make:model Product -f
# Tworzenie modelu z fabryką, migracją i seederem
php artisan make:model Article -f -m -s
# Tworzenie kompletnego zestawu dla modelu
php artisan make:model Customer -a