Laravel’de validasyon
Marhaba laravel’de bir kaç farklı validasyon yöntemi var. Bunlardan benim en çok kullandığım yöntem FormRequest
ten türetilmiş, bir Request
class’ı oluşturarak validaysonu bu class içerisinde yapmak. Böylelikle hem kod daha temiz ve okunaklı oluyor hem de daha sonra değişiklik yapmak kolaylaşıyor. Gelelim nasıl yapıldığına. Terminalden artisan
kullanarak Request’imizi oluşturalım.
php artisan make:request DemoRequest
komutunu çalıştırdıktan sonra DemoRequest.php
sayfası oluşacaktır.
app └── Http └── Requests └── DemoRequest.php
DemoRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class DemoRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => ['required'],
'content' => ['required'],
];
}
public function messages()
{
return [
'name.required' => 'Başlık alanı zorunludur',
'content.required' => 'İçerik alanı zorunludur',
];
}
}
Controller içinde kullanımına gelecek olursak.
public function store(DemoRequest $request)
{
$input = $request->all();
...
}
Bu durumda validasyon her istekte devreye girecektir. velide edilemediği halde ise istek atan sayfaya yönlenecek ve hata mesajlarını gönderecektir. blade içinde hata mesajlarını yazdırmak için aşağıdaki kodu kullanabilirsiniz.
Blade
@if($errors->any())
@foreach ($errors->all() as $error)
<span class="alert alert-danger" role="alert">{{ $error }}</span>
@endforeach
@endif
sadece belirli input’un hata mesajını yazdırmak isteseydik
@if($errors->has('name'))
{{ $errors->first('name') }}
@endif
Evet size gönderilen Formu valide edecekseniz durum böyle peki RESTful mimaride durum nasıl ? RESTful yazarken DemoRequest.php
dosyasında değişiklik yapmamız gerekecek. Hata oluştuğu zaman, hata mesajlarıyla birlikte istek atan sayfaya yönlenmek yerine json
dönmesi gerekecek.
RESTFul
protected function failedValidation(Validator $validator)
{
$errors = (new ValidationException($validator))->errors();
throw new HttpResponseException(
response()->json(['errors' => $errors], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)
);
}
RESTful için yukarıdaki fonksiyonu DemoRequest
classına eklemeniz yerli olacak.