Laravel FormRequest Kullanarak Hata Durumunda Custom Response Gönderme
Bir iş için lazım oldu. Buraya not edeyim dedim. Belki siz de kullanırsınız.
php artisan make:request PostAddRequest
Yukarıdaki kodu kullanarak içerik eklenirken bir validasyon sınıfı oluşturalım.
İçerisi varsayılan olarak şunlar gelir.
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class PostAddRequest extends Request
{
public function authorize()
{
return false; // Siz true yapacaksınız
}
public function rules()
{
return [
// Burada kurallarınız yer alacak
];
}
}
Siz kendi mesajlarınızı yazmak isterseniz aşağıdaki metodu eklemeniz gerekir.
public function messages()
{
return [
// Burada kendi hata mesajlarınız yer alacak
];
}
Gelelim asıl meseleye. Hata durumunda custom bir response dönmek için aşağıdaki kodu kullanabiliriz.
use Illuminate\Contracts\Validation\Validator; // Sayfanın en başına eklenecek
protected function failedValidation(Validator $validator) {
$message = $validator->errors()->first(); // (1)
$response = redirect($this->getRedirectUrl())
->with([
'flash' => true,
'type' => 'error',
'message' => $message,
])
->withErrors($validator)
->withInput(); // (2)
throw new ValidationException($validator, $response); // (3)
}
Aslında bu kadar.
Ama gelin biz yukarıdaki kodu biraz açıklayalım.
(1) Önce $validator nesnesi üzerinden ilk hatamızı alıyoruz. ( Burada size kalmış, ben ilk hatayı bastırıyorum. )
(2) Kullanıcıya döndüreceğimiz HTTP Response ifadesini yazıyoruz. ( Ben burada ilk hatayı $message değişkenine atıp hata ve kullanıcının girdiği input değerlerini tekrar geriye döndürmek istediğimi söylüyorum. İlk with() ifadesi ön tarafta bir alert işlemi verdirmek için. )
(3) Sonra ValidationException sınıfından bir nesne oluşturup parametre olarak $validator ve $response ekleyip bu nesneyi fırlatıyoruz.
ValidationException sınıfını incelediğimizde constructor yapısının şu şekilde olduğunu görüyoruz.
public function __construct($validator, $response = null, $errorBag = 'default')
{
parent::__construct(static::summarize($validator));
$this->response = $response;
$this->errorBag = $errorBag;
$this->validator = $validator;
}
$validator parametresini anlatmaya gerek yok sanırım.
$response parametresi ise bir HTTP response tutar. Kullanıcıyı bilgilendirirken neler göndereceğimizi burada belirleyebiliriz.
Son olarak, kullanıcıya hatasını göstermek için sweetAlert kullandım. Yukarıdakilerle bağdaştırmak için blade.php dosyası içine yazdığım kodu buraya bırakıyorum.
@if (Session::has('flash') )
@if ( Session::get('type') == "success" )
Swal.fire({
icon: 'success',
title: 'Tebrikler',
text: "{{ Session::get("message") }}",
confirmButtonText: "Tamam!",
showConfirmButton: true
})
setTimeout(function () {
Swal.close();
}, 1500)
@else
Swal.fire({
icon: 'error',
title: 'Ups..',
text: "{{ Session::get("message") }}",
confirmButtonText: "Tamam!",
})
@endif
@endif
Evet, hepsi bu kadar..
Yorum Yap