• Şuradasınız
  • Anasayfa
  • PHP
  • Laravel ile Validation İşlemleri

Laravel ile Validation İşlemleri

Bir Web uygulaması geliştiriyorsanız, çok büyük ihtimalle kullanıcılardan veri/bilgi almanız gerekecektir. Bu, bir nevi kullanıcının kendini ifade etme isteğidir veya sizin kullanıcıya kendini ifade etme imkanı vermenizdir. Fakat input olarak alacağınız veriler her zaman masumane olmayabilir. Alınan verileri kontrol etmek gerekebilir.

Bu yazıda EloquentArtisanBlade gibi zaten bir sürü güzel özelliği olan Laravel PHP Framework ve Validation sınıfı ile kullanıcıdan alınan verilerin nasıl kontrol edilebileceğini anlatmaya çalışacağım.

Yapılacak olan validation işlemini client (istemci) tarafında da, server (sunucu) tarafında da yapabilirsiniz. Eğer güvenlik gerektirmeyen bir işlem söz konusuysa validation işlemlerinin JavaScript ile client tarafında yapılması daha uygundur. Burada Laravel’e veya herhangi bir PHP scriptine ihtiyacınız kalmaz.

Validation işlemini JavaScript ile yapmak UX (kullanıcı deneyimi) bazında da çok yararlı olacaktır. Şunu demek istiyorum; forma girilen veriler sayfa yenilenmeksizin kontrol edilir ve sayfa tekrar yüklenmez. Dolayısıyla zamandan da tasarruf etmiş/ettirmiş olursunuz.

Güvenlik gerektiren kontrolleri server tarafında yapmak zorundasınız. Burada sayfayı yenileyip kontrolleri arka planda gerçekleştirebilirsiniz. Fakat ben artık bu yöntemin eskimeye başladığını düşünüyorum. Dolayısıyla yapılan kontrollerde JavaScriptJQuery ve Ajax‘ın da etkin olarak kullanılması gerektiğini düşünüyorum.

Yani asıl anlatmak istediğim, sayfayı yenilemeden server tarafında kontrol yapmaktır. Bu durumda, ortada hem güvenlik açığı olmaz, hem de UX olarak iyi bir iş çıkartmış olursunuz.

Ben geyik yapmayı sevdiğim için teori kısmını biraz uzun tutmuşum, kusura bakmayın :) Biraz da pratik kısma bakalım.

Yapılacak olan işlemler bütününü özetlersek; HTML formundan arkaplanda çalışan bir PHP sayfasına,AJAX ile istek yapıp, dönen değere göre kullanıcıya bilgi vereceğiz.

Öncelikle kullanıcının bilgilerini girebileceği bir HTML formu oluşturalım. Madem Laravel kullanıyoruz, o halde Laravel’in Template Engine‘i olan Blade ile yapalım:

// -- app/views/register.blade.php
<p>
    {{ Form::label('register_username', 'Kullanıcı Adı') }}
    {{ Form::text('username', NULL, array('class' => 'register-username', 'id' => 'register_username')) }}
</p>
<p>
    {{ Form::label('register_mail', 'Mail Adresi') }}
    {{ Form::text('mail', NULL, array('class' => 'register-mail', 'id' => 'register_mail')) }}
</p>
<p>
    {{ Form::label('register_password', 'Şifre (En az 4 karakter)') }}
    {{ Form::password('password', array('class' => 'register-password', 'id' => 'register_password')) }}
</p>
<p>
    {{ Form::submit('Tamamdır, Beni Kaydet !', array('class' => 'lets-register')) }}
</p>
<div class="register-errors"></div>

Burada “register-errors” sınıflı div ile hata oluşursa ekranda göstereceğiz.

Girilen bilgileri alıp bir PHP sayfasına gönderen JQuery/Ajax kodunu yazalım:

// -- app/views/register.blade.php

Kullanıcı kaydını yapacak olan PHP sayfasını tanımlayalım:

// -- app/routes.php
Route::post('kayit', function(){
    //
});

Laravel, “RESTful” mimarisiyle sayfaya yapılan isteğin tipini belirleyip ona göre işlem yapabiliyor. Ajax kodunda POST metoduyla istek yap demiştik, dolayısıyla kayıt işlemini yapacak sayfanın tipini de post yaptık. Eğer bu sayfaya elle istek yaparsanız hata alırsınız, bu GET metoduyla istek yapmak demektir.

Yukarıda, bir “kayit” sayfası tanımlamıştık, şimdi de fonksiyonun içini dolduralım:

// -- app/routes.php
// Formdan gelen bilgiler
$user = array(
    'username'  => Input::get('username'),
    'mail'      => Input::get('mail'),
    'password'  => Input::get('password')
);
// Kurallar
$rules = array(
    'username'  => 'required|alpha_dash|unique:users',
    'mail'      => 'required|email|unique:users',
    'password'  => 'required|min:4'
);
// Hata mesajları
$messages = array(
    'username.required'     => '+ Kullanıcı adınızı bilmeliyiz.',
    'username.unique'       => '+ Kullanıcı adı başkası tarafından kullanılıyor.',
    'username.alpha_dash'   => '+ Geçerli bir kullanıcı adınız olmalı.',
    'mail.required'         => '+ Mail adresinizi bilmeliyiz.',
    'mail.email'            => '+ Geçerli bir mail adresiniz olmalı.',
    'mail.unique'           => '+ Mail adresi başkası tarafından kullanılıyor.',
    'password.required'     => '+ Şifreniz boş olmamalı.',
    'password.min'          => '+ Şifreniz en az 4 karakterli olmalıdır.'
);
// Validation
$validate = Validator::make($user, $rules, $messages);

Validator sınıfının make metodu bizden 3 parametre bekliyor. İlki kontrol edilecek verileri oluşturan array, ikincisi verilere atanan kuralları oluşturan array, üçüncüsü ise hata durumunda oluşacak mesajları oluşturan array. Biz yukarıda 3 array tanımladık ve Validator sınıfının make metodunu ateşledik.

Burada kuralları biraz açıklamakta fayda var.

  • required, değerin boş olup olmadığını,
  • alpha_dash, değerin alfa nümerik değer ve/veya alt çizgi haricinde bir karakter içerip içermediğini,
  • unique, değerin belirtilen tabloda olup olmadığını,
  • email, değerin email formatında olup olmadığını kontrol etmektedir.

Tüm kuralları görmek için buraya bakabilirsiniz.

Kodu devam ettirelim:

// Hataları tara
if($validate->fails())
{
    // Ekrana yazdır
    foreach ($validate->messages()->all() as $message)
    {
        echo $message . "<br/>";
    }
    // Durdur
    exit;
}

Validator sınıfının make metodu geriye bir obje döndürür. Bu objenin fails metodunu kullanarak hataları tarayabiliriz. Yukarıda kodda, hatalar echo ile ekrana bastırılmış ve akış durdurulmuştur.

Burada echo kullanmak aslında, hata mesajlarını AJAX fonksiyonuna göndermek demektir. AJAX bu hata mesajlarını alıp en başta oluşturduğumuz “register-errors” sınıflı divin içini dolduracaktır.

Laravel’in Validation sınıfını basitçe bu şekilde kullanabilirsiniz. CodeIgniter veya diğer frameworklerde işkence olabilen bu özellik Laravel’de çok basite indirgenerek çok etkin bir şekilde kullanılmış.

Laravel ve Validation sınıfının çok daha fazlasına buradan ulaşabilirsiniz.

Yukarıdaki kodda, eğer bir validation hatası oluşmazsa akış devam edecektir. İsterseniz kodun son kısmını da yazalım, yani kullanıcı kaydı yapan kısmını:

// Eski şifre
$password = $user['password'];
// Şifreyi şifrele
$user['password'] = Hash::make($user['password']);
// Yeni kullanıcı ekle
$theUser = User::create($user);
if($theUser)
{
    // Eski şifre
    $user['password'] = $password;
    // Session aç
    Auth::attempt($user, $remember = TRUE);
    // Eklendi
    echo "TRUE";
}
else
{
    // Eklenemedi
    echo "Bir hata oluştu ! Tekrar deneyiniz.";
}

Validation sınıfının bence en büyük özelliği hata mesajlarını da bir input olarak alması. Dahası, bu mesajları çok esnek bir şekilde kullanmaya olanak sağlaması. Mesela aşağıdaki gibi bir kod yazarsanız:

if($validate->fails())
{
    return Redirect::to('')->withErrors($validate);
}

Laravel, mesajları yönlenen sayfaya session içerisinde aktaracaktır. Bu mesajları işlemek için ise aşağıdaki yolları kullanabilirsiniz.

// username alanı ile ilgili ilk hata mesajı
{{ $errors->first('username') }}
// username alanı ile ilgili tüm hata mesajları
@if($errors->has('username'))
    @foreach($errors->get('username') as $message)
    {{ $message }}
    @endforeach
@endif

Benim Laravel Validation sınıfı ile ilgili söyleyeceklerim bu kadardı. Umarım işinize yaramıştır.

Benzer Yazılar

Yorumlar

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla