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.

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
9 + 1 =