Merhaba,


Bu yazıda Laravel'de Form Request kullanımı ile Validation işleminden bahsedeceğim.


Öncelikle senaryomuzu belirleyelim. Bir blog sitesi için Laravel ile Rest Api geliştirdiğimizi varsayalım. Bu proje için veritabanımızda blog yazılarını tuttuğumuz posts adında bir tablo olduğunu ve bu tabloda title (yazı başlığı), detail (yazı detayı) ve image (yazının resmi) sütunlarının bulunduğunu düşünelim. Bu sütunlar doldurulması zorunlu alanlar olsun. Biz de yazı ekleme fonksiyonunda Validation işlemi yaparak bu zorunlu alanlar için gerekli kontrolü gerçekleştirelim.


api.php dosyasını açarak yazı ekleme işlemi için route tanımlayalım;

Route::post('posts', 'PostController@store');


PostController dosyasını oluşturalım;

php artisan make:controller PostController


Şimdi ilk olarak Form Request kullanmadan bir Validation işlemi yapalım;
...
use Validator;

class PostController extends Controller
{
    public function store()
    {
        $validator = Validator::make(request()->all(), [
            'title' => 'required',
            'detail' => 'required',
            'image' => 'required'
        ]);
        if ($validator->fails()) {
            return response()->json(['message' => 'Lütfen tüm alanları doldurunuz.'], 400);
        }

        // Gerekli kontrolü geçtikten sonraki işlemler
        ...
    }
}


Projeyi ayağa kaldıralım;

php artisan serve


Postman üzerinden test edelim;

title verisini göndermediğimizde hata mesajının geldiğini görmüş olduk.


Şimdi de Form Request kullanarak Validation işlemini gerçekleştirelim;
php artisan make:request StorePostRequest


Bu komutu çalıştırdığımızda app\Http\Requests klasörü oluşacaktır. İçerisinde bulunan StorePostRequest.php dosyasını açarak içeriğini şu şekilde dolduralım;

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;

class StorePostRequest extends FormRequest
{
    public function rules()
    {
        return [
            'title' => 'required',
            'detail' => 'required',
            'image' => 'required'
        ];
    }

    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(
            response()->json(['message' => 'Lütfen tüm alanları doldurunuz.'], 400)
        );
    }
}

Burada yaptığımız işlemler;

  • rules fonksiyonunda Validation kontrolü için gerekli tanımlamaları yaptık.
  • failedValidation fonksiyonunda, Validation kontrolünden geçilememesi durumundaki hata fırlatma işlemini yaptık.


Bunların dışında authorize (request işlemini yapma yetkisi, örneğin sadece giriş yapan kullanıcılar bu request'i gerçekleştirebilsin), messages (her kural için özel bir mesaj, örneğin title girilmediyse "Lütfen yazının başlığını giriniz." mesajı) gibi fonksiyonlarda tanımlayabilirdik. Detaylı bilgiye ulaşmak için; Link


Son olarak PostController dosyamızda şu değişikliği yapıyoruz;

...
use App\Http\Requests\StorePostRequest;

class PostController extends Controller
{
    public function store(StorePostRequest $request)
    {
        // Gerekli kontrolü geçtikten sonraki işlemler
        ...
    }
}


Projeyi ayağa kaldırıp, Postman üzerinden title verisini göndermeyip test ettiğimizde yine aynı şekilde hata mesajı gelecektir. Bu şekilde hem Controller dosyamızı daha temiz bir hale getirdik, hem de tanımlamış olduğumuz Form Request'i başka kısımlarda da (örneğin yazı düzenleme) tekrar kullanabilir olduk.


Umarım yararlı olmuştur.


İyi çalışmalar.