Yii komponentlari
Salom. Bugun Yii dagi klasslar (komponetnlar) bilan tanishamiz. Buning uchun sizda PHP dagi class haqida tushuncha va magic metodlar (__get, __set) kabilar haqida tushuncha bo’lishi lozim.
Komponentlar haqida gapirishdan oldin, o’zim tushinishim juda qiyin bo’lgan bitta narsa haqida etmoqchiman. Yii da CComponent nomli klasi mavjud (framework/base/CComponent.php faylda) va shu klass Yii dagi qolgan deyarli barcha klasslarni ota klasi (parent class) hisoblanadi.
Keling misol tariqasida tushuntirsam:
//CComponent klasidan nasl olamiz
class MyClass extends CComponent
{
public $_value = 0;
//getter deyiladi
public function getValue()
{
return $this->_value;
}
//setter
public function setValue($newValue)
{
$this->_value = $newValue;
}
}
//yangi obyekt
$ptr = new MyClass();
//$_value ni olish
echo $ptr->_value; // natija 0
echo $ptr->getValue(); // natija 0
//CComponentni yana bir hususiyati
//agar metod nomi "get" bilan boshlansa
//uni "get" so'zini yozmasdan ham chaqirish mumkin
//ya'ni $ptr->getValue va $ptr->value bitta $ptr->getValue() metodini chaqiradi
//php dagi __get metodi ishlatilgan
echo $ptr->value; //natija 0
//$_value ga qiymat berish
$ptr->_value = 5;
echo $ptr->value; //natija 5
$ptr->setValue(10);
echo $ptr->value; //natija 10
//endi huddi getValue ga o'xshab
//agar metod nomi boshi "set" bilan boshlansa
//shu metodni "set" so'zisiz ham shu metodni chaqirsa bo'ladi
//ya'ni
$ptr->value = 15; //ushbu holatda $this->setValue(15) chaqiriladi. PHP __set magic funksiyasi orqali
echo $ptr->value; //natija 15
Umuman
$ptr->getValue() $ptr->value
$ptr->setValue($a) $ptr->value = $a;
Yana setValue faqat bitta parametr qabul qiladi (array ham bo’lishi mumkin).
Agar MyClass dagi $_value o’zgaruvchisi nomini $value qilib o’zgartirsak, setValue va getValue funksiyari umuman ishlamaydi. Chunki $ptr->value qilganingizda (php dagi __get, __set chaqirilmasdan) to’g’ridan to’g’ri klass o’zgaruvchisi chaqiriladi.
Ana endi componentlarga o’tsak bo’ladi.
Companent — bu oddiy aniq maqsadga yo’naltirilgan klass. Misol uchun: sessiya bilan ishlash (framework/web papakasida CHttpSession), url bilan ishlash (CUrlManager), avtorizatsiya (framework/web/auth/CWebUser) kabi aniq bir maqsadga yo’naltirilgan klassladir.
Yii dagi barcha kompanentlar ro’yxatini ko’rmoqchi bo’lsangiz:
1. framework/base/CApplication.php dagi registerCoreComponents metodini
2. framework/web/CWebApplication.php da ham registerCoreComponents metodini ko’ring
Yii::app() bu — CWebApplication obyekti o’zgaruvchisidir. Agar CWebApplication dagi biron-bir metodni chaqirmoqchi bo’lsak Yii::app()->metodNomi() ko’rinishida ishlatamiz. Demak o’z o’zidan komponentlarni ham chaqirish uchun Yii::app()->user, Yii::app()->session yoki Yii::app()->getUser(), Yii::app()->getSession() ko’rinishida qo’llaymiz.
Keling avvalo o’zimizni matematika amallarini bajaradigan komponentimizni yarataylik, shunda barchasini tushinib olasiz.
Buning uchun site2.uz fayllaridan foydalanamiz. protected papkasi ichiga «components» nomli papka yarating va shu papka ichiga MyMath.php faylini yaratib ichiga quyidagi kodni yozing.
_bSoni = $qiymat;
}
public function getBSoni()
{
return $this->_bSoni;
}
public function Qushish()
{
return $this->aSoni + $this->bSoni;
}
public function getKupaytirish()
{
return $this->aSoni * $this->_bSoni;
}
}
Har xil usullarni qo’lladim, hammasi tushunarli bo’lishi uchun. Endi config/main.php ni ochamiz va
...
'import'=>array(
'application.models.*',
'application.components.*' //ni qo'shamiz, MyMath chaqirilishi uchun
),
...
//components ro'yxati
'components' => array(
/**
* O'zimizni yaratgan komponentimizni ro'yxatga
* qo'shib qo'yamiz
* 'myMath' bu Yii::app()->myMath deb chaqirish uchun
* zaruru bo'lgan qisqacha nomi
* 'class' => "MyMath" biz yaratgan komponentni klass nomi
*/
'myMath' => array(
'class' => "MyMath"
)
)
...
endi FirstController ga o’tib (agar oldingi maqoladagi sozlashlar saqlangan bo’lsa), actionEntry ichiga yozami.
public function actionEntry()
{
echo "Qo'shish: ".Yii::app()->myMath->aSoni." + ".Yii::app()->myMath->bSoni." = ".Yii::app()->myMath->Qushish()."
";
Yii::app()->myMath->aSoni = 10;
Yii::app()->myMath->bSoni = 15;
echo "Qo'shish: ".Yii::app()->myMath->aSoni." + ".Yii::app()->myMath->bSoni." = ".Yii::app()->myMath->Qushish()."
";
echo "Ko'paytirish: ".Yii::app()->myMath->aSoni." * ".Yii::app()->myMath->bSoni." = ".Yii::app()->myMath->kupaytirish."
";
}
Natija:
Qo'shish: 0 + 0 = 0
Qo'shish: 10 + 15 = 25
Ko'paytirish: 10 * 15 = 150
ko’rinishida bo’ladi.
Endi quyidagi savolni qo’ysam: aSoni bilan bSoni ni config/main.php sozlashlari orqali o’zgaritirish mumkinmi? Javob ha. Endi yana config/main.php faylini ochingda:
...
'myMath' => array(
'class' => "MyMath",
'aSoni' => 5,
'bSoni' => 7 //yoki '_bSoni' => 7 ko'rinishi ham yozsa bo'ladi
)
deb yana sayt2.uz ga kirib ko’ring. Endi natija:
Qo'shish: 5 + 7 = 12
Qo'shish: 10 + 15 = 25
Ko'paytirish: 10 * 15 = 150
quyidagiga o’zgaradi.
Bunda xulosa shuki, config/main.php orqali biz har qanda Yii dagi komponent o’zgaruvchisi qiymatini o’zgartirishimiz mumkin ekan. Demak bizda komponentlarda qanday o’zgaruvchilar borligini o’rganish qoldi holos.
Shuning bilan ushbu maqola ham tugadi.
Endiki maqola URL lar haqida, (CUrlManager) kompaninti bilan ishlash haqida bo’ladi.
Texnologiyalar
Yii komponentlari