Bileşen mimarisi (kendi bileşenlerinizi geliştirin)

2

Tarih : 27-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Bir faces bileşeni (component) oluşturmak için sınıfınızı Component sınıfından genişletirsiniz.

basit bir bileşenin en az iki metodu bulunmalıdır. Kurucu metod ve  startTag metodu.

Kurucu metodun iki parametresi bulunur birinci parametresi bir FacesController ikinci parametresi ise view dosyasında etiket olarak tanımlanan bileşenin nitelikler dizisidir.

function construct(FacesController &$controller,$args=null)

startTag metodu bileşen etiketinin başlangıç için çıktı üreten metodudur. Bir etiket açıldığında çalıştırılır.

endTag metodu bileşen etiketinin kapatıldığında çalıştırılan metodu.

Basit bir örnek

import("phpf.ui.component");
class Kalinyaz extends Component{
function Kalinyaz (FacesController &$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {

return '<strong>';
}
function endTag() {

return '</strong>';
}}

Örneğimizde Kalinyaz isminde bir bileşen tanımladık <f:Kalinyaz> </f:Kalinyaz> etiketleri arasındaki metni kalın yazı tipi ile tarayıcıda göstermek istiyoruz. Bileşenimizi kullanmak istediğimiz dizin içerisine kalinyaz.php adı ile kayıt ediyoruz.

Kalinyaz bileşenini view içerisinde kullanımı.

<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz>
Bu yazı kalın olmalı
</my:kalinyaz>
Bu yazı normal
</faces>

Bileşen içerisinde Niteliklere erişim.

Bileşenin attributes uyesi nitelikleri içeren bir dizidir nitelik değerlerine

$this->attributes[nitelikadi] şeklinde erişilebilir.

Yukarıdaki örneğimizi biraz daha geliştirip metin rengi ve metin boyunu uygulayan bir bileşen haline getirelim. Aşağıdaki örneği inceleyin

import("phpf.ui.component");
class Kalinyaz extends Component{
function Kalinyaz (FacesController &amp;$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {
$html = '<strong>'.'<font color="'.$this->attributes[renk].
'" size="'.$this->attributes[boy].'">' ;

return $html;
}
function endTag() {

return '</font></strong>';
}}

Yukarıda bileşenimize boy ve renk adında iki nitelik olduğunu görülebilir.

Bileşenimizin view içerisinde kullanımı.

<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz boy="10" renk="red">
Her hangi bir yazı
</my:kalinyaz>
</faces>

Component sınıfının  doAttributes() metodu tüm nitelikleri eş değer ismi ile yerleştirir

function startTag() {

return '<strong>'.'<font'. $this->doAttributes() .'>' ;
}
<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz size="10" color="red">
Her hangi bir yazı
</my:kalinyaz>
</faces>

Bileşenlere eklenen öğeler bileşeninizin items uye dizinsinde yer alır
Items kullanımı için aşağıdaki örneği inceleyin

import("phpf.ui.component");
class Strong extends Component{
function Strong(FacesController &amp;$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {
$html = '<strong>'.'<font'. $this->doAttributes() .'>' ;

foreach($this->items as $item)
$html.= '<br/><a href="'.$item[url].'">'.$item[title].'</a>';

return $html;
}
function endTag() {

return '</font></strong>';
}
}

View içerisinde kullanımı

<faces>
<@import prefix="my" taglib="mypath.strong"/>
<my:strong name="test" size="4" face="Arial" color="red">
<@item url="http://www.google.com" title="google"/>
<@item url="http://www.webmahsulleri.com" title="WebMahsulleri"/>
bazı yazilar
</my:strong>
</faces>
<p class="MsoNormal">

Bir faces bileşeni (component) oluşturmak için sınıfınızı Component sınıfından genişletirsiniz.

basit bir bileşenin en az iki metodu bulunmalıdır. Kurucu metod ve startTag metodu.

Kurucu metodun iki parametresi bulunur birinci parametresi bir FacesController ikinci parametresi ise view dosyasında etiket olarak tanımlanan bileşenin nitelikler dizisidir.

function construct(FacesController &$controller,$args=null)

startTag metodu bileşen etiketinin başlangıç için çıktı üreten metodudur. Bir etiket açıldığında çalıştırılır.

endTag metodu bileşen etiketinin kapatıldığında çalıştırılan metodu.

Basit bir örnek

import(”phpf.ui.component”);

class Kalinyaz extends Component{

function Kalinyaz (FacesController &$controller,$args=null){

parent::Component($controller,$args);

}

function startTag() {

return ‘<strong>’;

}

function endTag() {

return ‘</strong>’;

}

}

Örneğimizde Kalinyaz isminde bir bileşen tanımladık <f:Kalinyaz> </f:Kalinyaz> etiketleri arasındaki metni kalın yazı tipi ile tarayıcıda göstermek istiyoruz. Bileşenimizi kullanmak istediğimiz dizin içerisine kalinyaz.php adı ile kayıt ediyoruz.

Kalinyaz bileşenini view içerisinde kullanımı.

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz”>

Bu yazı kalın olmalı

</my:kalinyaz>

Bu yazı normal

</faces>

Bileşen içerisinde Niteliklere erişim.

Bileşenin attributes uyesi nitelikleri içeren bir dizidir nitelik değerlerine

$this->attributes[nitelikadi] şeklinde erişilebilir.

Yukarıdaki örneğimizi biraz daha geliştirip metin rengi ve metin boyunu uygulayan bir bileşen haline getirelim. Aşağıdaki örneği inceleyin

import(”phpf.ui.component”);

class Kalinyaz extends Component{

function Kalinyaz (FacesController &$controller,$args=null){

parent::Component($controller,$args);

}

function startTag() {

$html = ‘<strong>’.'<font color=”‘.$this->attributes[renk].

‘” size=”‘.$this->attributes[boy].’”>’ ;

return $html;

}

function endTag() {

return ‘</font></strong>’;

}

}

Yukarıda bileşenimize boy ve renk adında iki nitelik olduğunu görülebilir.

Bileşenimizin view içerisinde kullanımı.

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz” boy=”10″ renk=”red”>

Her hangi bir yazı

</my:kalinyaz>

</faces>

Component sınıfının doAttributes() metodu tüm nitelikleri eş değer ismi ile yerleştirir

function startTag() {

return ‘<strong>’.'<font’. $this->doAttributes() .’>’ ;

}

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz” size=”10″ color=”red”>

Her hangi bir yazı

</my:kalinyaz>

</faces>

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Doğrulama Sınıfları (Kendi Doğrulayıcılarınız)

0

Tarih : 26-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, Faces ORM, PHP Faces

Doğrulayıcı(Validator) sınıfları durağan(static) metotları kullanan sınıflardır. işlerinizi kolaylaştırması ve yazılımın bütünleşik parçalar halinde kolektif bir yapıda çalışmasına olanak sağlar.
Bir doğrulama metodunun tanımlaması aşağıdaki gibidir


static function required(Component $c,Component $m,$message,$success)

Birinci parametre “Component $c” doğrulama işleminin yapıldığı bileşen
İkinci parametre “Component $m” mesajların yazdırılacağı bileşen
Üçüncü parametre uyarı mesajı
Dördüncü parametre doğrulama mesajı
Örneğin yeni üye kaydı için bir üye kayıt formumuzun olduğunu ve aynı ismi taşıyabilecek sadece bir üye olduğunu düşünelim.
Bunun için Uyekontrol adında bir sınıf oluşturup varmi ismini taşıyan bir doğrulama metodu ekliyorum

class uyekontrol
{

static function varmi(Component $c,Component $m,$message,$success)
{
$sorgu =  EntityManager::getInstance()->createQuery("select  u from uyeler u where uye.adi =:uyead");
$sorgu->bindParam("uyeadi", $c->getText);
$sorgu->execute();
$sonuc =$sorgu->getSingle();

if($sonuc!=null){
$m->setText($message);

return >true;
}
$m->setText($success);

return >true;
}
}

Şimdi oluşturduğumuz doğrulama sınıfını view (görünüm) içerisinde kullanalım

<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<f:form method="post" name="uyeform">
Uye adi :<f:textbox
name="uyeadi"
validator="uyekontrol"
rule="varmi"
success="Uye adi doğrulandı "
message=" Daha önce bu isimde bir üye kayıt olmuş farklı bir isim deneyin! "
messagefor="msgbox"
/>
<f:message id="msgbox"/>
<f:button name="kaydet" text="Gönder" onclick="actionevent" forname="uyeform"/>
</f:form>
</faces>

Validador sınıfımızı controller içerisinde import ediyoruz

import("phpf.controllers.facete");
import("dbf.persistence");
import("dogrulayicilar.uyekontrol",true);//uygulama dizini

class Controller extends Facete{
function Controller(){
parent::Facete();
$this->render("uyekayit.phpf");
}
function kaydetClicked($evt){
$uye = new uye();
$uye->adi = $this->uyeadi->text;
$uye->save();
}
}
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Çoklu Doğrulamalar(Multi Validation)

0

Tarih : 26-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Çoklu doğrulamalar bir bileşene birden çok doğrulama yapmak istediğiniz zaman kullanışlıdır çoklu doğrulamalarda nitelik değerleri “,” virgül ile bir birlerinden ayrılmalıdır.
Örneğin required ve mail doğrulamalarının birlikte planlanması.

<f:textbox name="email"
                       validator="validator"
                       rule="mail,required"
                       message="*Hatali mail adresi,* Bu alan boş geçilemez"
                       success="Adres doğrulandı,"
                       messagefor="msg1,msg2"/>
            <f:message id="msg1"/>
            <f:message id="msg2"/>

Bu örnekte önce mail doğrulaması daha sonra required doğrulaması yapılır. her iki doğrulama sonucu yanlış olursa her iki mesajda işletilir.
mail doğrulamasının mesajı “msg1″ required doğrulamasının mesajı “msg2″ bileşenlerine yazdırılır.
e-mail adresinin doğrulanması durumunda “Adres doğrulandı” mesajı msg1 bileşeninde yazdırılır.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Doğrulama Kullanımları(Validator sınıfı)

0

Tarih : 25-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Validator sınıfının metotları aşağıdaki gibidir.

  • required
  • equals
  • minLength
  • maxLength
  • mail
  • alpha
  • alpha_numeric
  • numeric
  • integer
  • betweenLength
  • between
  • boolean
  • test

required post edilen bileşinin içeriğinin boş olup olmadığını kontrol eder

Örnek

isim :<f:textbox
name="textbox"
validator=" validator"
rule="required"
message="Bu alan boş geçilemez"
messagefor="msgbox"/>
<f:message  name="msgbox"/>

equals post edilen bileşenin içeriğinin  test niteliği ile uyuşup uyuşmadığını  kontrol eder

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="equals"
test="200"
message="Hata girilen değer 200 değil "
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

minLength post edilen bileşenin içeriğinin karakter uzunluğunun  min niteliğinden büyük olup olmadığını   kontrol eder

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="minlength"
min="10"
message="En fazla 10 karakter "
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

maxLength post edilen bileşenin içeriğinin karakter uzunluğunun  max niteliğinden küçük olup olmadığını   kontrol eder

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="maxlength"
min=“5”
message="En az beş karakter girilmelisiniz !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Mail post edilen bileşenin içeriğinin bir mail adresi olup olmadığını kontrol eder

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="mail"
message="Bu bir mail adresi değil !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Alpha post edilen bileşenin içeriğinin bir sözel (string) olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="alpha"
message="Girilen değer sözel değil !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

alpha_numeric post edilen bileşenin içeriğinin bir karakterlerden ve sayılardan oluşup oluşmadığını olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="alpha_numeric"
message="Girilen değer sayı içermeli !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Numeric post edilen bileşenin içeriğinin bir sayısal değer olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="numeric"
message="Uyarı girdiğiniz değer bir sayı değil !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

integer post edilen bileşenin içeriğinin bir tam sayı olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="integer"
message="Uyarı girdiğiniz değer bir tam sayı değil !"
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

betweenLength post edilen bileşenin içeriğinin uzunluğunun min ve max değerleri arasında olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="betweenLength"
min="5"
max="20"
message="Beş karakterden az Yirmi karakterden uzun veri girmeyiniz! "
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Between post edilen bileşenin içeriğinin min ve max değerleri arasında olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="between"
min="0"
max="100"
message="Girilen sayı 0 ile 100 arasında değil ! "
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Boolean post edilen bileşenin içeriğinin mantıksal(boolean) değer olup olmadığını kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="Boolean"
message="Girilen değer mantıksal değil "
messagefor="msgbox"
"/>
<f:message  name="msgbox"/>

Test post edilen bileşenin içeriğinin bileşenin  test niteliğindeki mantıksal ifadenin uyuşup uyuşmadığını  kontrol eder.

Örnek

isim :<f:textbox
name="textbox"
validator="validator"
rule="test"
test="this.text >0 &amp;&amp; this.text >100 "
message=" Girilen sayı 0 ile 100 arasında değil ! "
messagefor="msgbox"
“/>
<f:message  name="msgbox"/>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Doğrulamalar (Validation)

1

Tarih : 25-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Doğrulama tanımlamaları view(görünün) içerisinde bileşen niteliklerine atama yapılarak sağlanır. Doğrulama sonucları event (olay) nesnesinin niteliğine göre AJAX ya da sayfa post edilerek tarayıcıya gönderilir.

Doğrulama işlemlerinde bileşenlerin 5 niteliği bulunur.

Bunlar

  • validator
  • rule
  • messagefor
  • message
  • success

Validator: bu niteliğe static metodlar barındıran doğrulama sınıfının ismi verilmelidir. io dizininde filtler ve validator isimlerimlerinde hazır iki doğrulama sınıfı bulunmaktadır.

Rule : Validator niteliği ile bildirilen doğrulama sınıfının doğrulma işlemi için kullandığı metodun ismidir. (doğrulama metodu)

Message : Doğrulama işlemin sonucunun (false) yanlış  olması durumunda  verilecek olan uyarı  mesajdır. Örneğin “Hatali email adresi girdiniz ! ”

Success Doğrulama işlemin sonucunun (true) doğru  olması durumunda  verilecek olan mesajdır. . Örneğin “email adresiniz doğrulandı ! ”  Eğer doğrulama mesajı verilmek istenmiyorsa bu nitelik boş bırakılabilir.

Messagefor : message ve success ile belirtilen mesajların hangi bileşende görüntüleneceğidir.

FacesController varsayılan durum da bir doğrulama işleminin sonucu yanlış ise olay metotlarını işletmez . Doğrulama işleminin sonucu yanlış olduğu halde örneğin bir Clicked metodunun işletilmesini istiyorsanız FacesController ın setValidCallBack(boolean); metoduna true değerini vermeniz yeterlidir.

Doğrulama işleminin sonucunun doğru ya da yanlış olduğunu bileşenin isValid metodunun döndürdüğü değere bakarak anlaşılabilir.

Örnek Kullanıcı tarafından girilen e-mail Adresinin doğrulanması.

View görünüm dosyası

<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<f:form method="post">
E-Mail :<f:textbox
validator="filter"
rule="mail"
success="Mail adresiniz doğrulandı"
message=" Hatali email adresi girdiniz ! "
messagefor="msgbox"
/>
<f:message id="msgbox"/>
</f:form>
</faces>

Doğrulama işlemi sonucu doğru ise  msgbox isimli bileşende success ile belirtilen yanlış ise message ile belirtilen bilgi yer alır.

Filtler sınıfının metotları aşağıdaki gibidir.

  • required
  • mail
  • url
  • ip
  • float
  • int
  • boolean
  • regxp

Validator sınıfının metotları aşağıdaki gibidir.

  • required
  • equals
  • minLength
  • maxLength
  • mail
  • alpha
  • alpha_numeric
  • numeric
  • integer
  • betweenLength
  • between
  • boolean
  • test
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)