Validálás
Validálni akkor szoktunk amikor bejövő adatunk van valahonnan. Leggyakrabban űralpokat szoktunk (amiket a felhasználó tölt ki). Validációnak minősül pl.: hogy a felhasználó kitöltötte-e a mezőt, vagy egy e-mail cím a formailag helyes-e stb.
Az alábbi példában egy nagyon egyszerű űrlapot (formot) fogunk validálni (ellenőrizni). Fontos tudni, hogy a validációt legtöbbször post metódussal végezzük, ugyanakkor a form megjelenítésére get metódust használunk.
Hozzuk létre az űrlapunkat (formot). Ehhez egy view-t kell létrehozni, neve: dolgozoForm
php artisan make:view dolgozoForm
A létrejött fájl (resources/views/dolgozoForm.blade.php) így néz ki:
<div>
<!-- The only way to do great work is to love what you do. - Steve Jobs -->
</div>
A nézet fájlban hozzuk létre a űrlapot. Természetesen ez itt nem a teljes kód, az egyszerűség kedvéért nem használtam semmilyen formázást, vagy adatkitöltést.
- A @csrf minden form-ba (ami post metódusos) bele kell írni! Ez védi a rendszerünket a külső forrásból érkező adatoktól (pl.: robotok)
- A @error('xxx') {{$message}} @enderror jeleníti meg a hibaüzenetet az adott form elemhez. Az xxx helyére a form elem name értékét kell írni!
- Az "{{old('xxx')}}" arra való, hogy hibás kitöltés esetén a mezőbe írt értéket visszatöltse. Az xxx helyére a form elem name értékét kell írni!
...
<form method="POST">
@csrf
<label for="nev">Név:</label>
<input type="text" name="nev" id="nev" value="{{old('nev')}}" >
@error('nev')
{{$message}}
@enderror
<label for="email">E-mail cím:</label>
<input type="email" name="email" id="email" value="{{old('email')}}" >
@error('email')
{{$message}}
@enderror
<button type="submit">Beküldés</button>
</form>
....
Készítsünk egy controllert ami majd az útvonalakat dolgozza fel, parancssorban adjuk ki az alábbi parancsot:
php artisan make:controller DolgozoController
A létrejött fájl (app/Http/Controllers/DolgozoController.php) így néz ki:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DolgozoController extends Controller{
//
}
Először írjuk meg azt a függvényt ami a form megjelenítéséért felelős.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DolgozoController extends Controller{
public function create(){
return view("dolgozoForm");
}
}
Állítsuk be, hogy a /dolgozo-rogzites url-n az elkészített form jelenjen meg. Nevezzük is el az url-t a name() használva (ez arra jó, hogy nem kell majd konkrét url címet megadni amikor hivatkozunk valahol). (routes/web.php)
use App\Http\Controllers\DolgozoController;
Route::get('/dolgozo-rogzites',[DolgozoController::class,'create'])->name('dolgozoform');
És ha már ott vagyunk a fájlba akkor állítsuk be azt is, hogy a /dolgozo-rogzites dolgozza is majd fel a kérést, a store metódussal. FIGYELEM! Az url cím ugyanaz lesz, de már post metódussal! (routes/web.php)
use App\Http\Controllers\DolgozoController;
Route::get('/dolgozo-rogzites',[DolgozoController::class,'create']);
Route::post('/dolgozo-rogzites',[DolgozoController::class,'store']);
A controller fájlban hozzuk létre a store() metódust (app/Http/Controllers/DolgozoController.php).
- A Request $req mint bemenő paramétert adjuk meg, ez arra kell, hogy a formból érkező adatokat elérjük.
- A validate() metódusnak két paramétere van, mind a kettő tömb. Az első tömbben a validációs szabályokat kell megadni. Egy mezőhöz több szabályt is adhatunk. A második tömben a kiírandó üzeneteket kell meghatározni (Amiket a view-ban a $message helyére kerülnek).
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DolgozoController extends Controller{
public function create(){
return view("dolgozoForm");
}
public function store(Request $req){
$req->validate(
[
/*Ide kerülnek a validációs szabályok*/
],
[
/*Ide kerülnek a validációs szabályok üzenetei*/
]
);
/*Ettől a résztől, a kód csak akkor fut meg, ha a validálás sikeres (minden szabálynak megfelelt.)*/
}
}
Ebben a példában a név mezőt szeretném validálni arra, hogy kötelező (request) legyen kitölteni, valamint minimum 5 karaktert (min:5) be kelljen írni. Az email mező kitöltése szintén kötelező (request), valamint szintaktikailag helyesnek (email:rfc) kell lennie.
A validációs szabályok szintakszisa: "mező neve" => "validációs szabályok | -el elválasztva.
A validációs szabályok üzenetének szintakszisa: "mező neve.validációs szabály" => "üzenet amit ki írunk"
Az, hogy milyen előre megírt validációs szabályok vannak a laravel oldalán meg lehet nézni. Tehát a fent említett store() metódust az előbb leírt szabályoknak megfelelően megírom:
...
public function store(Request $req){
$req->validate(
[
"nev" => "request|min:5",
"email" => "request|email:rfc"
],
[
"nev.request" => "A név mező kitöltése kötelező",
"nev.min" => "Névnek minimum 5 karaktert meg kell adni",
"email.request" => "Az email mező kitöltése kötelező",
"email.email" => "Az e-mail cím formátuma nem megfelelő"
]
);
/*Ettől a résztől, a kód csak akkor fut meg, ha a validálás sikeres (minden szabálynak megfelelt.)*/
}
...
Amennyiben a validálási szabályokon átmegy a kérés, úgy az érkező adatokat feldolgozhatjuk. Ezt legtöbb esetben modelleket felhasználva tesszük. Az alábbi példában az adatok mentését mutatom meg (de lehetne firssítés, vagy akár törlés is).