Generator kontrolera Laravel
Kontroler CRUD z Eloquent
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator kontrolera Laravel
Kontroler pośredniczy między trasami a logiką aplikacji. Dla typowego CRUD wystarczy kilka metod korzystających z modelu Eloquent.
Akcje kontrolera
| Metoda | Działanie |
|---|---|
| index | lista rekordów |
| show | pojedynczy rekord |
| store | utworzenie rekordu |
| update | aktualizacja rekordu |
| destroy | usunięcie rekordu |
Route Model Binding
Typując model w argumencie metody, Laravel automatycznie znajdzie rekord na podstawie parametru trasy i zwróci 404, jeśli nie istnieje. Nie musisz pisać ręcznego find().
Przykład
Kontroler ProductController dla modelu Product z akcjami index, show, store, update i destroy to gotowy szkielet REST API.
Jak działa generator kontrolera Laravel
Generator działa na zasadzie szablonu klasy kontrolera. Pobiera nazwę modelu, na przykład Article, i na jej podstawie tworzy nazwę klasy ArticleController oraz import modelu. Szablon ma stałą strukturę: nagłówek z namespace i extends Controller, a następnie sekcje metod odpowiadające wybranym akcjom.
Dla każdej wybranej akcji generator wstawia sygnaturę zgodną z konwencją Laravel. W metodach show, update i destroy typuje model w argumencie, dzięki czemu działa Route Model Binding — Laravel sam pobiera rekord po parametrze trasy i zwraca 404, gdy rekord nie istnieje. Nie musisz pisać ręcznego find().
Wynik jest zwykłym tekstem gotowym do wklejenia do pliku w katalogu app/Http/Controllers. Narzędzie nie uruchamia kodu, nie łączy się z bazą danych i nie modyfikuje plików projektu. Kolejność metod w wygenerowanym pliku odpowiada kolejności zaznaczonej w formularzu, a nazwy parametrów wynikają z nazwy modelu.
Przykład krok po kroku
- W polu model wpisujesz nazwę Article. Generator normalizuje ją do liczby pojedynczej i tworzy klasę ArticleController.
- Zaznaczasz pięć akcji: index, show, store, update i destroy. To dokładnie pięć metod w klasie.
- Generator buduje nagłówek pliku: namespace App\Http\Controllers, import App\Models\Article oraz extends Controller.
- Dla każdej akcji wstawia sygnaturę: index(), show(Article $article), store(Request $request), update(Request $request, Article $article) i destroy(Article $article).
- Wynikiem jest jeden plik z pięcioma metodami. Jeśli zarejestrujesz je pojedynczo w routes, odpowiada im pięć wpisów tras. Przy Route::resource liczba wpisów będzie większa, bo resource dodaje też trasy create i edit.
Akcje kontrolera i przykładowe trasy resource
| Metoda kontrolera | Metoda HTTP | Trasa resource i zastosowanie |
|---|---|---|
| index | GET | /articles — lista rekordów |
| show | GET | /articles/{article} — pojedynczy rekord |
| store | POST | /articles — utworzenie rekordu |
| update | PUT/PATCH | /articles/{article} — aktualizacja rekordu |
| destroy | DELETE | /articles/{article} — usunięcie rekordu |
Praktyczne wskazówki użycia
- Nazywaj model w liczbie pojedynczej. Article, a nie Articles — Laravel sam wyliczy liczbę mnogą dla tabeli i tras.
- Typuj model w metodach show, update i destroy. Dzięki temu Route Model Binding zwróci 404 zamiast ręcznego find() i pustego obiektu.
- Trzymaj kontroler lekki. Walidację przenieś do FormRequest, a logikę biznesową do serwisów lub akcji.
- Dla API dodaj API Resource. Klasa ArticleResource oddzieli format JSON od modelu i ułatwi zmianę struktury odpowiedzi.
- Rejestruj trasy spójnie. Albo pojedyncze wpisy dla wybranych metod, albo Route::resource, gdy potrzebujesz całego zestawu CRUD.
Ograniczenia generatora
- Nie tworzy plików w projekcie. Generator zwraca tylko kod do skopiowania — nie zapisuje kontrolera ani nie modyfikuje routes.
- Nie zna struktury bazy. Nie sprawdzi, czy model Article istnieje, jakie ma pola ani relacje. Nazwy metod są szablonowe.
- Nie generuje walidacji ani autoryzacji. FormRequest, Policy i gates musisz dopisać samodzielnie.
- Nie uwzględnia niestandardowych akcji. Jeśli potrzebujesz metod spoza zestawu CRUD, np. publish lub archive, dopiszesz je ręcznie.
Kiedy generator kontrolera Laravel realnie się przydaje
- Start nowego projektu API — gdy masz już modele i migracje, a brakuje warstwy HTTP. Sprawdź, czy wygenerowane sygnatury zgadzają się z nazwami parametrów tras i czy model jest importowany z właściwego namespace.
- Kilka modeli w jednym zadaniu — przy wdrożeniu modułu, który dotyczy na przykład produktów, kategorii i zamówień, generujesz kolejne klasy jedna po drugiej. Warto wtedy sprawdzić spójność nazw metod, żeby wszystkie kontrolery w projekcie wyglądały tak samo.
- Nauka konwencji Laravel — generator pokazuje, jak wygląda poprawna sygnatura metody z typowaniem modelu i wstrzyknięciem Request. Sprawdź, w których metodach typujesz model, a w których tylko Request, bo od tego zależy działanie Route Model Binding.
- Rozbudowa istniejącego kontrolera — gdy kontroler ma już część metod, a potrzebujesz dopisać brakujące akcje CRUD. Sprawdź, czy nie duplikujesz metod i czy kolejność oraz nazwy parametrów są zgodne z tym, co już jest w pliku.
- Dokumentacja i code review — wygenerowany kod bywa punktem odniesienia przy omawianiu standardu w zespole. Sprawdź, czy zespół stosuje FormRequest i API Resource, zanim uznasz szkielet za gotowy do wdrożenia.
Najczęstsze błędy przy generowaniu kontrolera
Pierwszy typowy błąd to niestaranna nazwa modelu. Wpisanie liczby mnogiej, wersalików w środku wyrazu albo myślnika prowadzi do klasy o błędnej nazwie i importu, który nie istnieje w projekcie. Laravel oczekuje liczby pojedynczej w PascalCase, więc zamiast Articles wpisz Article. Drugi częsty problem to kopiowanie kodu bez sprawdzenia, czy model rzeczywiście jest w App\Models — jeśli trzymasz go w podkatalogu lub używasz innej przestrzeni nazw, import trzeba poprawić ręcznie. Trzeci błąd to pominięcie klasy Request w importach, gdy zaznaczysz akcje store i update: bez niej PHP zgłosi błąd jeszcze przed uruchomieniem logiki.
Kolejna grupa błędów wynika z traktowania szkieletu jako gotowej implementacji. Wygenerowane metody mają puste ciała, więc wysłanie formularza zwróci pustą odpowiedź albo błąd, dopóki nie dopiszesz walidacji i zapisu. Nie zakładaj też, że generator sprawdzi kolizje nazw — jeśli plik ArticleController już istnieje, nadpiszesz go przy wklejeniu. Unikniesz tego, kopiując kod do nowego pliku i porównując zawartość przed zapisem. Na koniec pamiętaj o autoryzacji: brak Policy lub gates oznacza, że każdy uwierzytelniony użytkownik wykona te same operacje, niezależnie od uprawnień.
Najczęstsze pytania
Kontroler czy resource controller?
Resource controller ma wszystkie metody CRUD w jednej klasie i rejestruje trasy jednym Route::resource(). To wygodne dla standardowego CRUD.
Czym jest API Resource?
To klasa formatująca model do JSON (np. ProductResource). Oddziela reprezentację danych od modelu.
Gdzie umieścić logikę biznesową?
W kontrolerze tylko koordynacja. Złożoną logikę przenieś do serwisów lub akcji, aby kontrolery pozostały lekkie.
Jak wygenerować kontroler Laravel dla modelu?
Wpisz nazwę modelu, zaznacz akcje CRUD i skopiuj gotowy kod do pliku w app/Http/Controllers. Pamiętaj o zaimportowaniu modelu, jeśli generator nie zrobił tego za Ciebie.
Czy generator tworzy też model i migrację?
Nie. To narzędzie generuje wyłącznie kod kontrolera. Model, migrację i fabrykę tworzysz osobno, np. w innych generatorach.
Po co typować model w metodzie kontrolera?
Typowanie modelu w argumencie włącza Route Model Binding. Laravel sam znajdzie rekord po parametrze trasy i zwróci 404, jeśli rekord nie istnieje, więc nie musisz pisać find() ani findOrFail().
Czy resource controller wystarczy do API?
Resource controller daje komplet metod CRUD, ale nie formatuje odpowiedzi JSON. Do API zwykle dodaje się API Resource, który oddziela reprezentację danych od modelu.
Jak dodać walidację do wygenerowanego kontrolera?
Najlepiej przez FormRequest. Tworzysz klasę żądania, wstrzykujesz ją do metody store lub update i wywołujesz $request->validated(). Kontroler pozostaje wtedy lekki.
Czy mogę podać model z podkatalogu, np. Admin\Article?
Możesz, ale generator potraktuje cały ciąg jako nazwę klasy. Wtedy samodzielnie popraw import i nazwę klasy kontrolera, tak aby odpowiadały strukturze katalogów w projekcie. Najbezpieczniej generować dla prostej nazwy modelu, a namespace dostosować już w pliku.
Czy generator obsługuje kontrolery z pojedynczą akcją __invoke?
Nie, narzędzie buduje klasy z zestawem metod CRUD wybieranych w formularzu. Kontroler invokable napiszesz ręcznie — wystarczy jedna metoda __invoke z typowaniem Request i zwrotem odpowiedzi. Taka klasa sprawdza się przy prostych akcjach, które nie są częścią standardowego CRUD.
Jak przenieść wygenerowany kod do projektu bez błędów składniowych?
Wklej go do pliku w katalogu app/Http/Controllers i upewnij się, że nazwa pliku jest identyczna z nazwą klasy. Następnie usuń niepotrzebne importy, dodaj brakujące i uruchom sprawdzenie składni lub test, zanim zarejestrujesz trasy. Dzięki temu zauważysz problem wcześniej niż przy pierwszym żądaniu do aplikacji.