- Basit Kullanım
- Hata Mesajlarıyla Çalışmak
- Hata Mesajları & Görünümler
- Mevcut Geçerlilik Kuralları
- Özel Hata Mesajları
- Özel Geçerlilik Kuralları
Laravel, Validation
sınıfı aracığıyla verilerin geçerlilik denetimi ve geçerlilik hata mesajlarının gösterilmesi için basit ve kullanışlı bir araçla birlikte gelmektedir.
Basit Bir Geçerlilik Denetimi Örneği
$geçerlilikyoklayici = Validator::make(
array('isim' => 'Dayle'),
array('yas' => 'required|min:5')
);
Buradaki make
metoduna geçilen ilk parametre, geçerli olup olmadığına bakılacak veridir. İkinci parametre ise, bu veriye tatbik edilecek geçerlilik kurallarıdır.
Birden çok kural ya bir "pipe" karakteri (|) ile ayrılır, ya da ayrı dizi elemanları olarak verilebilir.
Kuralları Belirtmek İçin Dizi Kullanımı
$geçerlilikyoklayici = Validator::make(
array('isim' => 'Dayle'),
array('yas' => array('required', 'min:5'))
);
Bir Validator
olgusu oluşturulduktan sonra, geçerlilik denetimi yapmak için fails
veya passes
metodları kullanılabilir.
if ($geçerlilikyoklayici->fails())
{
// İlgili veri geçerlik denetimini geçememiştir
}
Şayet geçerlilik denetimi başarısız olursa, geçerlik yoklayıcısından hata mesajları alabilirsiniz:
$mesajlar = $geçerlilikyoklayici->messages();
Ayrıca, başarısız olan geçerlilik kurallarına bir dizi olarak da erişebilirsiniz. Bunu yapmak için failed
metodunu kullanabilirsiniz:
$kalanlar = $geçerlilikyoklayici->failed();
Dosyalar İçin Geçerlilik Denetimi
Validator
sınıfı dosyaların geçerliliği konusunda size
, mimes
ve benzeri kurallar sağlar. Dosyaları geçerlilikten geçirirken, tıpkı diğer verilerde olduğu gibi bunları da geçerlilik denetçisine parametre olarak geçersiniz.
Bir Validator
olgusunda messages
metodunu çağırdıktan sonra, bir MessageBag
olgusu alacaksınız. MessageBag sınıfında hata mesajlarıyla çalışmak için bir takım yararlı metodlar vardır.
Bir Alan İçin İlk Hata Mesajının Elde Edilmesi
echo $mesajlar->first('email');
Bir Alan İçin Tüm Hata Mesajlarının Elde Edilmesi
foreach ($mesajlar->get('email') as $mesaj)
{
//
}
Tüm Alanlar İçin Tüm Hata Mesajlarının Elde Edilmesi
foreach ($mesajlar->all() as $mesaj)
{
//
}
Bir Alan İçin Hata Mevcut Olup Olmadığının Tespiti
if ($mesajlar->has('email'))
{
//
}
Bir Hata Mesajının Biçimlendirilmiş Olarak Alınması
echo $mesajlar->first('email', '<p>:mesaj</p>');
Not: Ön tanımlı olarak, mesajlar Bootstrap'a uyumlu bir söz dizimiyle biçimlendirilir.
Tüm Hata Mesajlarının Biçimlendirilmiş Olarak Alınması
foreach ($mesajlar->all('<li>:mesaj</li>') as $mesaj)
{
//
}
Geçerlilik denetimi yaptıktan sonra aldığınız hata mesajlarını görünümlerinize gönderecek kolay bir yola ihtiyacınız olacak. Bu iş Laravel tarafından pratik bir şekilde halledilmektedir. Bir örnek olarak şu rotaları ele alalım:
Route::get('kayit', function()
{
return View::make('uye.kayit');
});
Route::post('kayit', function()
{
$kurallar = array(...);
$geçerlilikyoklayici = Validator::make(Input::all(), $kurallar);
if ($geçerlilikyoklayici->fails())
{
return Redirect::to('kayit')->withErrors($geçerlilikyoklayici);
}
});
Dikkat ederseniz, geçerlilik başarısız olduğunda, Validator
olgusunu withErrors
metodunu kullanarak Redirect'e geçiriyoruz. Bu metod, hata mesajlarını oturuma flaş tipinde aktaracak, yani bir sonraki isteğe kadar kullanılabilir olacaktır.
Buna karşın, yine dikkat ederseniz GET rotamızda hata mesajlarını görünüme açık olarak bağlamak zorunda değiliz. Bunun nedeni, Laravel'in oturum verisinde hatalar olup olmadığını her zaman yoklaması ve olduğunu tespit etmesi halinde bunları otomatik olarak görünüme bağlamasıdır. Bu itibarla, her istekte tüm görünümleriniz için bir $errors
değişkeni mevcut olacağını unutmayın, dolayısıyla siz $errors
değişkeninin her zaman tanımlanmış olduğunu iç rahatı ile varsayıp, güvenle kullanabilirsiniz. Bu $errors
değişkeni MessageBag
sınıfından bir olgu olacaktır.
Bu durumda, yeniden yön verme sonrasında, otomatikman bağlanan $errors
değişkenini görünümlerinizde kullanabilirsiniz:
<?php echo $errors->first('email'); ?>
Mevcut tüm geçerlilik kuralları ve bunların işlevleri aşağıda verilmiştir:
- Accepted
- Active URL
- After (Tarih)
- Alpha
- Alpha Dash
- Alpha Numeric
- Before (Tarih)
- Between
- Confirmed
- Date
- Date Format
- Different
- Exists (Veritabanı)
- Image (Dosya)
- In
- Integer
- IP Address
- Max
- MIME Types
- Min
- Not In
- Numeric
- Regular Expression
- Required
- Required If
- Required With
- Required Without
- Same
- Size
- Unique (Veritabanı)
- URL
Geçerlilik bakılan alan yes, on veya 1 olmalıdır. Bu, "Hizmet Şartlarının" kabul edildiğinin doğrulanmasında işe yarar.
Geçerlilik bakılan alan checkdnsrr
PHP fonksiyonuna göre geçerli bir URL olmalıdır.
Geçerlilik bakılan alan verilen bir tarihten sonraki bir değer olmalıdır. Tarihler PHP strtotime
fonksiyonuna geçirilecektir.
Geçerlilik bakılan alan tamamen alfabe harfleri olmalıdır.
Geçerlilik bakılan alan alfa-numerik karakterler yanında tire ve alt tire de olabilir.
Geçerlilik bakılan alan tamamen alfa-numerik karakterler olmalıdır.
Geçerlilik bakılan alan verilen bir tarihten önceki bir değer olmalıdır. Tarihler PHP strtotime
fonksiyonuna geçirilecektir.
Geçerlilik bakılan alan verilen min ile max arasında bir büyüklükte olmalıdır. Stringler, sayılar ve dosyalar size
kuralıyla aynı tarzda değerlendirilir.
Geçerlilik bakılan alana uyan eden bir falan_confirmation
alanı olmalıdır. Örneğin, geçerlilik bakılan alan parola
ise, inputta karşılık gelen bir parola_confirmation
alanı olmalıdır.
Geçerlilik bakılan alan strtotime
PHP fonksiyonua göre uygun bir tarih olmalıdır.
Geçerlilik bakılan alan date_parse_from_format
PHP fonksiyona göre tanımlanmış bir format'a uygun olmalıdır.
Verilen alan, geçerlilik bakılan alandan farklı olmalıdır.
Geçerlilik bakılan alan bir e-mail adresi şeklinde biçimlendirilmiş olmalıdır.
Geçerlilik bakılan alan verilen bir veritabanı tablosunda mevcut olmalıdır.
Exists Kuralının Basit Kulllanım Şekli
'il' => 'exists:iller'
Özel Bir Sütun İsminin Belirtilmesi
'il' => 'exists:iller,kisa_hali'
Sorguya "where" cümleciği olarak eklenecek daha fazla şart da belirtebilirsiniz:
'email' => 'exists:personel,email,hesap_id,1'
Geçerlilik bakılan alan bir imaj (jpeg, png, bmp veya gif) olmalıdır.
Geçerlilik bakılan alan verilen bir değerler listesinde olmalıdır.
Geçerlilik bakılan alan bir tamsayı olmalıdır.
Geçerlilik bakılan alan bir IP adresi olarak biçimlendirilmiş olmalıdır.
Geçerlilik bakılan alan bir maksimum deger'den az olmalıdır. Stringler, sayılar ve dosyalar size
kuralıyla aynı tarzda değerlendirilir.
Geçerlilik bakılan alan listelenen uzantılardan birine tekabül eden bir MIME tipinde olmalıdır.
MIME Kuralının Basit Kullanım Şekli
'resim' => 'mimes:jpeg,bmp,png'
Geçerlilik bakılan alan bir asgari deger'den büyük olmalıdır. Stringler, sayılar ve dosyalar size
kuralıyla aynı tarzda değerlendirilir.
Geçerlilik bakılan alan verilen değerler listesinde yer almamalıdır.
Geçerlilik bakılan alan sayısal bir değer olmalıdır.
Geçerlilik bakılan alan verilen düzenli ifadeye uygun olmalıdır.
Not: regex
deseni kullanırken, özellikle düzenli ifade bir pipe karakteri (|) içeriyorsa, kuralları belirtmek için pipe ayıracı kullanmak yerine bir dizide belirtmek gerekli olabilir.
Geçerlilik bakılan alan input verisinde bulunmak zorundadır.
Şayet alan alanı deger'e eşit ise, geçerlilik bakılan alan girilmek zorundadır.
Geçerlilik bakılan alan, sadece belirtilen alanların bulunması durumunda bulunmak zorundadır.
Geçerlilik bakılan alan, sadece diğer belirtilen alanlar olmadığı takdirde bulunmak zorundadır.
Verilen alan geçerlilik bakılan alanla aynı olmalıdır.
Geçerlilik bakılan alan verilen deger'le aynı büyüklükte olmalıdır. String veriler için, deger harf sayısı anlamına gelir. Numerik veriler için, deger verilen bir tamsayı değeridir. Dosyalar için, size kilobayt cinsinden dosya boyutuna karşılık gelir.
Geçerlilik bakılan alan verilen bir veritabanı tablosunda benzersiz olmalıdır. Eğer sütun
seçeneği belirtilmemişse, geçerlilik bakılan alan aynı zamanda sütun adı olarak kabul edilecektir.
Unique Kuralının Basit Kullanım Şekli
'email' => 'unique:uyeler'
Özel Bir Sütun Adının Belirtilmesi
'email' => 'unique:uyeler,email_adresi'
Verilen Bir ID İçin Unique Kuralının Göz Ardı Edilmesi
'email' => 'unique:uyeler,email_adresi,10'
Geçerlilik bakılan alan bir URL şeklinde biçimlendirilmiş olmalıdır.
Gerek duyduğunuzda, geçerlilik için ön tanımlı hata mesajları yerine özel hata mesajları kullanabilirsiniz. Özel mesaj belirtmek için birkaç yol var.
Validator'e Özel Mesaj Geçilmesi
$mesajlar = array(
'required' => ':attribute alanı gereklidir.',
);
$geçerlilikyoklayici = Validator::make($input, $kurallar, $mesajlar);
Not: Buradaki :attribute
yer tutucusu geçerlilik bakılan alanın gerçek adıyla değiştirilecektir. Geçerlilik mesajlarınızda diğer yer tutucuları da kullanabilirsiniz.
Diğer Geçerlilik Yer Tutucuları
$mesajlar = array(
'same' => ':attribute ve :other aynı olmalıdır.',
'size' => ':attribute tam olarak :size olmalıdır.',
'between' => ':attribute :min ile :max arasında olmalıdır.',
'in' => ':attribute şu tiplerden birisi olmalıdır: :values',
);
Bazen sadece belirli bir alan için özel hata mesajları belirlemek isteyebilirsiniz:
Belli Bir Attribute İçin Özel Mesaj Belirlenmesi
$mesajlar = array(
'email.required' => 'e-mail adresinizi bilmemiz gerekiyor!',
);
Bazı durumlarda, özel hata mesajlarınızı doğrudan Validator
'e geçirmek yerine bir dil dosyasında belirtmek isteyebilirsiniz. Bunu yapmak için, mesajlarınızı app/lang/xx/validation.php
dil dosyasındaki custom
dizisine ekleyiniz.
Özel Mesajların Dil Dosyalarında Belirtilmesi
'custom' => array(
'email' => array(
'required' => 'e-mail adresinizi bilmemiz gerekiyor!',
),
),
Laravel'de her biri yararlı çok sayıda geçerlilik kuralı bulunmaktadır; bununla birlikte siz kendiniz de bazı kurallar belirlemek isteyebilirsiniz. Özel geçerlilik kuralı kayda geçirmenin bir yolu Validator::extend
metodunu kullanmaktır:
Özel Bir Geçerlilik Kuralını Kayda Geçirme
Validator::extend('falan', function($attribute, $value, $parameters)
{
return $value === 'falan';
});
Not:
extend
metoduna geçilen kuralın adı "yılan tipi" (kelimeler boşluk olmaksızın, küçük harfli ve alt tire ile birleştirilmiş) olmalıdır.
Özel bir geçerlilik bitirme fonksiyonu (Closure) üç parametre alır: geçerlilik bakılacak $attribute
'ın adı, bu niteliğin $value
'i ve kurala geçilecek bir $parameters
dizisi.
Bu extend
metoduna bir bitirme fonksiyonu yerine bir sınıf ve metod da geçebilirsiniz:
Validator::extend('falan', 'FalanValidator@validate');
Özel kurallarınız için aynı zamanda bir hata mesajı da tanımlamanız gerekeceğini unutmayın. Bunu, ya aynı satırda özel hata mesaj dizisi kullanarak ya da geçerlilik dil dosyasına bir giriş eklemek suretiyle yapabilirsiniz.
Validator'ü genişletmek için bir bitirme fonksiyonu çağrısı kullanmak yerine, Validator sınıfının kendisini de genişletebilirsiniz. Bunu yapmak için, Illuminate\Validation\Validator
'ü genişleten bir Validator sınıfı yazın. Validation metodlarınızı, başına validate
getirerek bu sınıfa ekleyebilirsiniz:
Validator Sınıfının Genişletilmesi
<?php
class OzelValidator extends Illuminate\Validation\Validator {
public function validateFalan($attribute, $value, $parameters)
{
return $value === 'falan';
}
}
Daha sonra, özel Validator uzantınızı kayda geçirmeniz gerekiyor:
Özel Bir Validator Çözümleyicisinin Kayda Geçirilmesi
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new OzelValidator($translator, $data, $rules, $messages);
});
Özel bir geçerlilik kuralı oluştururken, bazı durumlarda, hata mesajlarıyla değiştirilecek özel yer tutucular tanımlamanız gerekebilir. Bunu, aynen yukarıda tarif edildiği gibi özel bir Validator oluşturup, bu validatore bir replaceXXX
fonksiyonu ekleyerek gerçekleştirebilirsiniz.
protected function replaceFalan($message, $attribute, $rule, $parameters)
{
return str_replace(':falan', $parameters[0], $message);
}