Generator Laravel FormRequest
Walidacja wydzielona z kontrolera
-
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 klasy FormRequest
FormRequest przenosi walidację z kontrolera do osobnej klasy. Kontroler staje się krótszy, a reguły można łatwo ponownie wykorzystać i testować.
Jak działa?
| Metoda | Rola |
|---|---|
| authorize() | czy użytkownik może wykonać akcję |
| rules() | reguły walidacji pól |
| messages() | własne komunikaty (opcjonalnie) |
Format reguł
Każda linia to pole: reguły, np. email: required|email|unique:users,email. Dostępne reguły to m.in. required, string, numeric, email, max, min, unique, exists, nullable.
Przykład użycia
public function store(StoreProductRequest $request)
{
return Product::create($request->validated());
}
Jak generator zamienia wpisane linie na klasę FormRequest
Narzędzie działa jak prosty parser tekstu wejściowego. Każda linia opisuje jedno pole formularza i znajdujące się po dwukropku reguły. Generator rozdziela nazwę pola od reguł, a następnie reguły rozbija po znaku pionowej kreski. Z otrzymanych elementów buduje tablicę zwracaną przez metodę rules(). Nie odwołuje się przy tym do bazy danych ani do modeli — nie sprawdza, czy tabela users istnieje, ani czy kolumna email ma odpowiedni typ.
Klasa wynikowa dziedziczy po FormRequest. Metoda authorize() zwraca wartość wybraną w interfejsie: true albo false. Metoda rules() zawiera mapowanie pole => ciąg reguł. Jeżeli użytkownik poda własne komunikaty, generator tworzy także metodę messages() z tablicą kluczy w formacie pole.reguła. To wszystko jest zwykłym kodem PHP, który można wkleić do projektu Laravel.
Wzór przetwarzania jest liniowy: pole = tekst przed pierwszym dwukropkiem, reguły = tekst po dwukropku. Znaki | rozdzielają poszczególne reguły, a ewentualne parametry po dwukropku w regule, np. max:255, pozostają częścią reguły. Dlatego wpis name: required|string|max:255 trafia do rules() jako 'name' => 'required|string|max:255'.
Przykład krok po kroku dla formularza produktu
- Wpisujesz trzy pola: name, price oraz email. Dla każdego podajesz reguły w osobnej linii.
- Name: required|string|max:255. To daje 3 reguły cząstkowe: required, string, max z parametrem 255.
- Price: required|numeric|min:0. To daje kolejne 3 reguły cząstkowe: required, numeric, min z parametrem 0.
- Email: required|email|unique:users,email. To daje 3 reguły cząstkowe: required, email, unique z parametrami users oraz email.
- Włączasz authorize() na true i nie dodajesz własnych komunikatów. Generator tworzy klasę StoreProductRequest z metodą rules(), która zwraca tablicę 3 pól.
- Łącznie w rules() znajduje się 9 tokenów reguł: 3 + 3 + 3. Kontroler może przyjąć StoreProductRequest i wywołać $request->validated(), otrzymując maksymalnie 3 zwalidowane pola.
Reguły z rules() — szybka ściągawka
| Reguła | Przykładowy zapis | Znaczenie |
|---|---|---|
| required | required | Pole musi być obecne i niepuste. |
| string | string | Wartość ma być tekstem. |
| numeric | numeric | Wartość ma być liczbą. |
| Wartość ma przypominać poprawny adres e-mail. | ||
| max | max:255 | Ustala górny limit długości lub wartości. |
| min | min:0 | Ustala dolny limit długości lub wartości. |
| unique | unique:users,email | Sprawdza unikalność w tabeli i kolumnie. |
| exists | exists:users,id | Sprawdza, czy rekord istnieje w tabeli. |
Praktyczne wskazówki przy generowaniu FormRequest
- Trzymaj jedną linię na jedno pole — generator nie zgaduje zależności między polami. Jeśli reguła musi być warunkowa, dopisz ją świadomie albo uzupełnij klasę ręcznie po wygenerowaniu.
- Nazywaj klasy od akcji — StoreProductRequest, UpdateProductRequest, StoreUserRequest. Dzięki temu od razu widać, gdzie dana walidacja ma zastosowanie.
- Ustawiaj authorize() świadomie — domyślnie bezpieczniej jest zostawić false i dopisać politykę lub warunek. Włączenie true ma sens tylko wtedy, gdy dostęp jest już ograniczony w innym miejscu.
- Własne komunikaty dodawaj punktowo — nadpisuj messages() tylko dla pól, które naprawdę wymagają innego brzmienia. Reszta może korzystać z domyślnych tłumaczeń Laravel.
- Testuj FormRequest osobno — sprawdź poprawne dane, brak pola, zły format i przekroczenie limitu. To szybsze niż testowanie całego kontrolera za każdym razem.
Ograniczenia generatora i rzeczy, które trzeba sprawdzić ręcznie
- Nie zna schematu bazy danych — reguła unique:users,email zostanie zapisana poprawnie jako tekst, ale generator nie sprawdzi, czy tabela users i kolumna email naprawdę istnieją.
- Nie obsługuje logiki warunkowej — jeśli reguła zależy od roli użytkownika, identyfikatora lub innego pola, trzeba dopisać ją ręcznie w rules() albo użyć odpowiedniej klasy reguły.
- Nie weryfikuje składni PHP — generator składa kod na podstawie wpisanych linii. Literówka w nazwie reguły nie zostanie wykryta, dopóki Laravel nie uruchomi walidacji.
- Nie generuje polityk, tłumaczeń ani testów — FormRequest to tylko warstwa walidacji i autoryzacji. Reszta zabezpieczeń, komunikatów i przypadków testowych pozostaje po stronie projektu.
Najczęstsze pytania
Dlaczego authorize() domyślnie false?
To bezpieczne ustawienie domyślne — musisz świadomie zezwolić na akcję. W generatorze możesz włączyć zwracanie true.
Co daje validated()?
Zwraca tylko dane, które przeszły walidację — chroni przed mass assignment niechcianych pól.
Jak dodać własne komunikaty?
Nadpisz metodę messages() i zwróć tablicę z kluczami w formacie pole.reguła.
Czym jest FormRequest w Laravel?
To klasa bazowa Laravel, która przenosi autoryzację i walidację z kontrolera do osobnego pliku. Kontroler otrzymuje gotowe, zwalidowane dane.
Jak wygenerować FormRequest bez wpisywania kodu ręcznie?
Możesz użyć generatora online: wpisujesz pola i reguły, a narzędzie zwraca gotową klasę PHP. Alternatywą jest ręczne utworzenie klasy lub użycie komendy artisan make:request.
Czy FormRequest może walidować tablice i pola zagnieżdżone?
Tak, jeśli zapiszesz odpowiednie nazwy pól, np. items.*.name, oraz reguły dla tablic. Generator przepisze je dosłownie, ale nie sprawdzi, czy struktura danych odpowiada temu zapisowi.
Jak przekazać dane z FormRequest do kontrolera?
W metodzie kontrolera wstrzykujesz typ klasy, np. StoreProductRequest $request, a następnie używasz $request->validated() albo $request->safe(). Otrzymujesz tylko dane dopuszczone przez reguły.
Czy w FormRequest można używać reguły unique i exists?
Tak. W rules() wpisujesz je tak samo jak w walidatorze, np. unique:users,email. Pamiętaj, że przy aktualizacji rekordu często trzeba pominąć bieżący identyfikator.