Aylık Arşiv: Mayıs 2012

Konsol Bazlı Çalışan Dosyalarınızı Sistem Komutuna Çevirin

Merhaba, bu yazıda Linux kullanıcıları için ufak bir ipucundan bahsetmek istiyorum…

Birçoğumuz hızlıca işlem yapmak için konsoldan çalışan, gerek Ruby, gerek Python gerekse diğer dillerle yapılan uygulamalar yapmıştır. Ama bu uygulamaların negatif bir yönü dosyanın bulunduğu fullpathi girip çalıştırıyoruz. Ama kendi_olusturdugunuz_dosya arguman şeklinde çalışmanın rahatlığı başka.

Basit bir uygulama yapalım:

#!/usr/bin/env python
print "Hello World"

Bunu komutum adıyla kaydedin (.py yazmayın)

Sonra da

sudo mv komutum /usr/bin
sudo chmod +x /usr/bin/komutum

Bu kadar.. Şimdi direk konsola komutum yazarak çalıştırabilirsiniz.

 
1 Kudos
Don't move

Yii Framework’de Session ve CDbCriteria Kullanımı

Bir önceki yazıda basitçe CFormModel’i incelemiştik. Ancak orada işlemimiz basit olsun diye veritabanı kullanmadık. Bu yazımızda veritabanı ile de işlem yapacağız.

Önceden varolan bir hello uygulamamız var. İsterseniz baştan bir hello isminde uygulama oluşturun veya yeni bir isimde uygulama oluşturun. Ben yeni birhello uygulaması oluşturdum.

Yine bir form olacak ve veritabanında bilgiler varsa kullanıcıya hoşgeldiniz diyeceğiz.

Öncelikle bir veritabanı oluşturun. Sonra şu SQL’i dump edin.

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `bilgiler` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `kullaniciadi` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 `parola` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
INSERT INTO `bilgiler` (`id`, `kullaniciadi`, `parola`) VALUES
(1, 'deneme', '8f10d078b2799206cfe914b32cc6a5e9'),
(2, 'abc', '900150983cd24fb0d6963f7d28e17f72');

protected/config/main.php dosyasının 55. satırından başlayıp, 61. satırda biten MySQL bağlantısını başlatın. Tabii Gii’yi de aktif edin.

Şimdi Gii’den giris adında bir Controller oluşturun. Ardından Bilgiler adında bir de Model oluşturun.

Öncelikle GirisController’ı düzenleyelim.

GirisController.php

<?php

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

    public function actionGiris(){

        $veri = new Bilgiler;

        if(isset(Yii::app()->session['logged'])){
            $this->render('dogru');
        }
        else{

            if(isset($_POST['Bilgiler'])){
                $veri->attributes = $_POST['Bilgiler'];

                if($veri->validate()){

                    $bilgi = new CDbCriteria;

                    $bilgi->condition = 't.kullaniciadi = :kullanici';
                    $bilgi->condition = 't.parola = :parola';

                    $bilgi->params = array(':kullanici' => $_POST['Bilgiler']['kullaniciadi']);
                    $bilgi->params = array(':parola' => md5($_POST['Bilgiler']['parola']));

                    $sonuc = Bilgiler::model()->findAll($bilgi);

                    if(!empty($sonuc)){
                        Yii::app()->session['logged'] = 'yes';
                        $this->render('dogru');
                    }
                    else{
                        $this->render('yanlis');
                    }
                }
                else{
                    $this->render('hata', array('eleman' => $veri));
                }
            }

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

    }
}

Açıklamaya geçmeden önce kısaca Yii Framework’unda Session kullanımlarından kısaca söz etmek istiyorum.

İki farklı kullanım vardır:

Eklemek için

Yii::app()->session[‘key’] = ‘value’;
Yii::app()->session->add(‘key’, ‘value’);

şeklinde… Ben bu yazıda 1. yapıyı kullanacağım.

Yukarida yeni bir session değeri oluşturduk.

Çağırmak için:

echo Yii::app()->session[‘key’];
echo Yii::app()->session->get(‘key’);

Silmek için

unset(Yii::app()->session[‘key’]);
Yii::app()->session->get(‘key’)->destroy();

Devam…

(actionGiris() metodunu açıklıyorum)

Öncelikle daha önce logged isminde bir session oluşturulmuş (yani giriş yapılmış mı) diye bakıyoruz. Eğer varsa direk dogru sayfasını açarız.

Ama eğer giriş yapılmamışsa…

Sonra bu Controller’a herhangi bir POST işlemi yapılmış mı bakıyoruz. Eğer yapılmamışsa kullanıcı girişi yapılacak olan formu render ediyoruz. Eğer POST yapılmışsa Bilgiler model’ındaki rules() fonksiyonundaki kurallara uyuyor mu diye validate() fonksiyonuyla kontrol ediyoruz. Eğer uygunsa CDbCriteria class’ı ile kontrol yapıyoruz. PDO kullananlar CDbCriteria’nın yapısına aşinadır. condition ile kuralları belirliyoruz. params ile anahtarların değerlerini belirliyoruz. Ardından $sonuc = Bilgiler::model()->findAll($bilgi); ile sorguyu gönderiyoruz. Eğer veri varsa logged session’ının atayıp dogru sayfasını, eğer yoksa yanlis sayfasını render ediyoruz.

$this->render(‘hata’, array(‘eleman’ => $veri)); Burası nedir?

Eğer ki POST edilen veri rules() fonksiyonundan geçemezse hata verilecek. (Örn: inputlardan birisi dolu birisi boşsa..)

Eğer POST işlemi yapılmamışsa giris bölümü render ediliyor (kullanıcı girişinin olduğu bölüm).

View katmanındaki dosyalar:

dogru.php

<?php
echo "Üye girişi yapıldı. Hoşgeldiniz.";

yanlis.php

<?php
echo "Böyle bir kullanıcı bulunamadı.";

hata.php

<?php
echo "Lütfen formdaki bütün alanları doldurun";

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;

Not: md5 şifreleme yöntemi kullandım. En ufak bir parola saklama işlemlerinde dahi md5 kullanmanızı öneririm.

Test için http://localhost/hello/index.php?r=giris/giris adresini açıp formlara abc abc yazabilirsiniz.

 
8 Kudos
Don't move

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