Yii Framework’de CForm Kullanımı

Merhaba, bu yazıda Yii Framework’de formların kontrol işlemlerinde kullanılan CForm’dan bahsetmek istiyorum.Yazıya başlamadan önce birkaç uyarı yapmak istiyorum. Bu yazıyı okumadan önce Yii Framework hakkında bilgi sahibi olmanız gerekebilir.

Eğer daha önce Yii ile bir tecrübeniz yoksa şuradaki yazıları okumanızı tavsiye ederim. Yine şu yazıda da ilk Yii uygulamasının nasıl başlatılacağı anlatılmış.

Şimdi konumuza dönebiliriz. Örneğin ilk olarak hello diye bir uygulama oluşturduğunuzu ve Gii ayarlarını yaptığınızı varsayıyorum.

Bu yazıda veritabanı ile ilgili bir işlem yapmayacağız. Sadece basit bir form post etme işlemi ile CForm’u tanıyacağız. Bunun için CForm’u MVC mimarisinin M yani Model kısmında kullanacağız.

Bunun için öncelikle Gii’den ornek diye bir Controller, bir de Model oluşturun. Ama dedik ki örneğimiz basit olsun diye veritabanı kullanmayacağız demiştik. Ama bu sefer de Gii’den Model oluşturamayacağız. O zaman şimdilik elle oluşturun Model’ı. Linux kullanıcıları /var/www/hello/protected/models altına ornek.php oluşturabilir. Linux kullanıcıları kısaca konsola touch /var/www/hello/protected/models/ornek.php yazabilir.

Şimdi bütün dosyalarımız hazır. Bundan sonra çok basit bir üye formu yapalım.

Models altındaki ornek.php yi açın.

<?php


class ornek extends CFormModel{
	public $kullaniciadi, $parola;
	private $kontrol;

	public function rules(){
		return array(
				array('kullaniciadi, parola', 'required'),
				array('kullaniciadi', 'length', 'max' => 10, 'min' => 3),
				array('kullaniciadi, parola', 'authenticate'),
			);
    }

	public function authenticate(){
		$this->kontrol = new UserIdentity($this->kullaniciadi, $this->parola);
		if(!$this->kontrol->authenticate()){
			$this->addError('hata', 'Giriş bilgilerinizde hata var.');
        }
    }
}

Yapılanları kısaca açıklayalım. rules() ileride view’de oluşturacağımız formda label’lara vereceğimiz değerler post edildikten sonra hangi değerleri barındırması gereken kuralları kontrol eder.
Ben örnek olması açısından kullanıcı adı ve parolanın zorunlu olarak girilmesini ve kullanıcı adınında en az 3 en fazla 10 karakter olabileceğini belirleyip, sonuçları kontrol için authenticate()e yolladım.

Yii’de bir uygulama başlattığınızda bir UserIdentity adında bir components belirler. İçinde basit bir kural barındırır. Gönderilen iki değer demo demo veya admin admin mi diye bakar. Biz de bu uygulama da bu components’den yararlanacağız.

authenticate() ile doğrulamadan geçen değerleri UserIdentity’e yolluyoruz. Eğer işlem başarısızsa hata verisine bir mesaj yüklüyoruz. Eğer daha fazla hata belirtmek istiyorsanız yeni bir satıra addError eklemelisiniz.

Burada bir daha bilgi vermek istiyorum. Örneğin kullanıciadi’na min 5 max 10 verdiniz diyelim. Form’a da kullanıcı adı bölümüne: demo parola bölümüne de: demo yazdınız diyelim. Bu yine hata verecektir. Çünkü rules’da min değerine uymadığı için.

Şu an model ile işimiz bitti. Sıra Controller’da.

OrnekController.php

<?php

class OrnekController extends Controller {
    public function actionIndex()   {
        $this ->render('index');
    }

    public function actionGiris(){

        $veri = new ornek;

        if(isset($_POST['ornek'])){

            $veri->attributes = $_POST['ornek'];

            if($veri->validate()){
                $this->render('dogru');
            }

            else{
                $this->render('yanlis', array('eleman' => $veri));
            }
        }

        else{
            $this->render('giris', array('eleman' => $veri));
        }

    }
}

(actionGiris() anlatıyorum)

Burası: http://localhost/hello/index.php?r=ornek/giris adresini açtığınızda Yii tarafından tetiklenecek olan bölümdür.
İlk başta eğer formdan veri post edildi mi kontrol edilir. Eğer edilmediyse, giris bölümü render edilir (giris’de üye giriş formu bulunacak).

Ama eğer bir data post edilmişse, gönderilen veriler attributes’e gönderilerek orada render edilir. Eğer işlem başarılıysa ($veri->validate()) dogru isimli view sayfası render ediliyor. Ama yanlışsa yanlis sayfası render ediliyor.

Peki yanlis sayfası render edilirken gönderilen bu array(‘eleman’ => $veri) ne için?

O da authenticate() de belirttiğimiz addError’ları view’da handle edebilmek için.

Controller’da tamam olduğuna göre son katman olan View’e gelelim. Şimdi protected/views/ornek klasörünün altına dogru.php, yanlis.php, giris.php dosyalarını açın. dogru.php’nin içine basitçe:

<?php
echo "üye girişi başarıyla tamamlandı";

yazabilirsiniz.

yanlis.php dosyası ise:

<?php
echo CHtml::error($eleman, 'hata');

şeklinde olmalı.

giris.php:

<?php 
$bilgiler = '';

$bilgiler .= CHtml::beginForm();
$bilgiler .= CHtml::errorSummary($eleman);

$bilgiler .= CHtml::activeLabelex($eleman, 'Kullanıcı adınız:');
$bilgiler .= CHtml::activeTextField($eleman, 'kullaniciadi');

$bilgiler .= CHtml::activeLabelex($eleman, 'Parolanız: ');
$bilgiler .= CHtml::activeTextField($eleman, 'parola');

$bilgiler .= CHtml::submitButton('Gönder');
$bilgiler .= CHtml::endForm();

echo $bilgiler;

Şimdi

http://localhost/hello/index.php?r=ornek/giris adresini açıp kullanıcı adı bölümüne demo parolaya demo yazın.

 
13 Kudos
Don't move

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Geri İzleme: