yii framework - aviny.com · 2019. 11. 27. · yii framework ٍدبفتعا یلوػ یبوٌُاس...
Post on 02-Nov-2020
28 Views
Preview:
TRANSCRIPT
Yii Framework
غ فبسعی ساوبی ػولی اعتفبدهشر
ثشای اتؾبس دس ة
0991تبثغتبى
تشرو تبلیف : ػلی ثشریبى
0
2
ایي کتبة ثشای اعتفبد دس ایتشت ث فست سایگبى اسائ ؽذ اعت.
ثب رکش هجغ ثلاهبغ اعت. شگ اعتفبد اص هغبلت
9
مقذمو .1
a. FrameworkYii چیغت؟
b. بی یژگی اص ثشخی Yii Framework
c. کبس ؽشع اص لجل یبصبی پیؼ
d. ثب سا بیی ثشبه چ Yii کشد تلیذ تاى هی
e. قت Yii Framework
f. پشژ الیي عبخت
g. فشهبى خظ اثضاسyiic
h. ؽذ عبخت فبیلبی ب پؽ
i. یغی کذ ثشای هبعت هضیظ
j. ثشبه تلیذ گب د هشاصل
k. ثشبه ش افلی لغوت چبس
2. MVC اجرای برنامو
a. MVC چیغت
b. Application
c. Entry Script
d. Bootstrap
e. Config
f. ثشبه ارشای صبلت ااع
g. ثشبه عبخت هشاصل
h. ثشبه یک ارشای هشاصل
کنترلر .3
a. کتشلشب بی ثشی اسث وداس
b. کتشلش هؼشفی
c. اکؾي خدکبس پبساهتشبی
d. کتشلش دس تؼشیف لبثل ػوهی پبساهتشبی
e. کتشلش دس اعتفبد لبثل هتذبی
f. ؽذ تؼشیف هتذ loadModel
g. کبسثش عتبیدسخا هذیشیت
h. کتشلشب هسد دس کبتی
مذل ىا .4
a. هذل بی ثشی اسث وداس
b. هذل ااع
c. دس ؽذ تؼشیف بی هتذ CModel هذل کلاعبی کلی دس اعتفبد لبثل
d. ااع Validator
e. alias عزی اػتجبس ثشای هؼشف بی
f. ب عزی اػتجبس اص هخبل چذ
g. اص اعتفبد تؼشیف ض Capcha
h. عزي اػتجبس بي عیبعت بي ب عبسي
i. Safe Attributesچیغت
j. ؽذ فبدس خغبي پیبهبي
k. خغب پیبم تؼییي
l. دس ؽذ تؼشیف بی هتذ CActiveRecord ع هذل کلاعبی دس اعتفبد لبثل
CActiveRecord
4
m. دس ؽذ تؼشیف هتغیشبی ب هتذ class CActiveRecordMetaData فبیل دس هرد
CActiveRecord
n. کتشلش عشیك اص هذل ث یدعتشع
o. هذل عشاصی دس لاصم کبت
ی ىا .5
a. ب ی هؼشفی
b. ی ث کتشلش اص آب همبدیش پبساهتشب اسعبل
c. دیگش ی دس ی یک فشاخای
d. ی داخل اص کتشلش ث دعتشعی
e. کتشلش عشیك اص ی ث دعتشعی
f. ی دس هذل خشری ث دعتشعی
g. عشاصی دس لاصم کبت view
h. ب لبلت هؼشفی
i. یک دادى لشاس layout دسى layout دیگش
j. Partial view
k. System View
l. Widget
m. یک عبخت Widget دلخا
n. Customizing Widgets Globally
o. Portlet
p. CActiveDataProvider
q. کلاط CHtml
r. Theming
بانک ىای اطلاعاتی .6
a. اعلاػبتی ثبک ثب کبس سػ ااع
b. اعلاػبتی ثبک ث اتقبل
c. DAO
i. دعتسات یارشا SQL
ii. تبیذ فشاخای
iii. ب تشاکؼ ثب کبس ض
iv. ب پبساهتش امیبد
v. فیلذب امیبد
vi. اص اعتفبد Table Prefix
d. Query Builder
i. سػ هضایبی Query Builder
ii. دعتسات ایزبد
iii. ب ر پشط ایزبد
iv. ب ر پشط ارشای
v. ػجبست آسدى دعت ث SQL ؽذ ایزبد
vi. ربیگضیي دعتسات ثشدى کبس ث
vii. ر پشط چذ ثب کبس
viii. داد ثب کبس بی ر پشط
ix. عبختبس ثب کبس بی ر پشط
e. Active Record
i. اعلاػبتی ثبک ث اتقبل
5
ii. تؼشیف AR Class
iii. سکسب عبخت
iv. سکسد اص فیلذ یک همذاس ث دعتشعی
v. بعت تاثغ اص اعتفبد
vi. ب سکسد خاذى سکسدب سعبی سص ث
vii. ب سکسد صزف
viii. ب ددا عزی اػتجبس
ix. هذل کلاط دس هفیذ هتذ چذ
x. دس ب تشاکؼ کبسگیشی ث AR
xi. Named Scopes
f. ثبک اعلاػبتی ساثغ ای
i. هذل دس ساثغ یک تؼشیف ض
ii. ای ساثغ بی ر پشط ارشای
iii. ساثغ داسی بی هذل اص اعتفبد ثذى ای ساثغ بی ر پشط ارشای
iv. ای ساثغ بی ر پشط بی گضی
v. تکشاسی بم ثب بی فیلذ
vi. پیب ای ساثغ ری پشط بی گضی
vii. ساثغ دس بی ر پشط کبسایی
viii. اعتبتیک بی ر پشط
ix. ثب ای ساثغ بی ر پشط Named Scopes
x. ثب ای ساثغ بی ر پشط through
g. اعلاػبتی ثبک هبرشات
ماژل ىا کامپننت ىا .7
a. هبژل هؼشفی
b. هبژل اص اعتفبد هضایبی
c. رذیذ بژله یک عبخت
d. هبژل اص اعتفبد ض
e. ب کبهپت هؼشفی
f. یک ث دعتشعی ض Component
g. ااع Component
h. کبهپت یک اص اعتفبد تؼشیف
i. فشك پیؼ بی کبهپت
تشخیص ىیت کاربر .8
a. دعتشعی صذد کبسثش یت تؾخیـ
فرم ىا .9
a. ب فشم هؼشفی
b. رذیذ فشم ایزبد ض
c. هذل چذ فشم یک
11. Caching
a. هؼشفی caching
b. Data Caching
c. کؼ اثغتگی
d. Fragment caching
e. کؼ بی گضی
f. ب داد اثغتگی
6
g. ب داد تع
h. ع دسخاعت
i. ت دس ت کشدى کؼ
j. Page Caching
k. پیب هضتای
yiiتسعو .11
a. هؼشفی تعؼ ب
b. ب تعؼ اص اعتفبد
c. ب تعؼ ایزبد
d. گبگى بی تعؼ عبخت
e. 9 بی کتبثخب اص اعتفبدrd-Party
تست .12
a. تغت سػ ااع
b. TDD
c. تغت Bootstrap
مذیریت آدرسيا .13
a. ایزبد URL ب
b. ؽذ گضاسی بم پبساهتشبی اص اعتفبد
c. کشدى هخفی index.php
مثال ىا .14
ضمیمو ىا .15
7
: سخه ملف
افعاض ب ط ضظ قبس دیكطفشبی ػسیسی زض حظ فبضی اعلافبر ی ثبقی. عب ثب سؾق ؾرز
اظی دیكطفز ی وس. ط افعاض بیی و نضرسیس لغقبر ثب لبثیز بی دیكطفش، ط افعاض ب یع ث
زض ای یب ؾ ثطب یؿب لطاض ی زس ط وسا فضببی ػسیسی ضا زض اذشیبض وبضثطا ذز
كشط اؾز.عطاحب ة ث فا سیس وسب ط افعاض ثؿیبض ثی
سؾق PHPثبظزی ثؿیبض ثبلا اؾز و ث ؾی ظثب ؾطفز ثب ثؿشط ط افعاضی یه Yiiفطی ضن
یبفش اؾز سابیی سیس ااؿ ط افعاضبی سحز ة ثب میبؼ بی ب ضا زاضا ی ثبقس.
ز و ث سبظی وبض ثب ای ط افعا فبضؾی ظثبی اؾ وه ث دیكطفز ثطب یؿبای وشبة سبیف سف اظ
سب حس اىب قس اؾزضی ضا زاضس چی ؾقی فعا لهس آقبیی ثب ای حیظ ط ا ز اسضا آغبظ
سجسی قز. ثطب یؿبسب وشبة ث نضر یه طػـ ثطای قزػعئیبر غبت یع حبػ
وشبة بی فی فطی ضن زض ؾبیز ضؾیای وشبة قب سطػ بیی اؾز و فیب اظ ضابی
چی ضابی وسبی زاذ فبیبی فطی ضن یع ضز ثططزا قس اؾز ای ضزشكط قس زض
زض اضز اسوی سؼطثیبر ظببی فی ف آضز قس اؾز.سػ لطاض طفش اؾز
ی قس اؾز غبت ث نضر یىذبضچ ؾ اضائ فطی ضن اضائ قس ؾق 1.1.8سب ای سبضید و ؿر
دقف زاز قز. قز وی اىببر ؿر بی لجی
سػ قب زض ؿر بی ثقسی انلاح غئب ای وشبة یع زاضای اقىبلاسی ی ثبقس و ثب ضابیی
ایی اظ عطیك آزضؼغفب دیكبز یب ؾط زض نضر زاقش ط ؾا، .ذاس قس
web.ebox@gmail.com ثب ف زض یب ثصاضیس.آ ضا
ثطب یؿب فبضؾی ظثب ثطزاقش ضا اضسمبی فی ای وشبة ثشاس بی طچس وچه زض ایساض
ثبقس.
فی ثطػیب
1390قطیض
8
Framework Yii چیست؟
بؾت ثطای دیبز Platformیهثطب یؿب عطاحب ؾبیز بی ایشطشی اشربث ذاؾش بیاظ یىی
دضسب ب ی ثبقس. قبیس ثطای وبضثطا یسظ فب ثطب ، ثطب بی سحز ةؾبظی ؾبیز ب
ث MS dotNet Frameworkعی بی ظیبزی ثطای اشربة غطح جبقس ASP.NETیؿب
انی ضز اؾشفبز لطاض یطز. اب ثطای ثطب یؿب ػبق ش ثبظ ث ذهل ثطب Platformفا
بؾت ثطای Platformاؾز. دیسا وطز مساضی دیچیسبؾت Platformاشربة یه PHPیؿب
س ضز ث فضببی ػسیس ضا دكز ؾط صاقش اس له PHPثطب یؿبی و ؾغح شؾظ ثطب یؿی
ب ضا قیس Platformثب لبثیز بی ثیكشط ضا زاضس اطی ث قبض ی ضز.قبیس ب ثؿیبضی اظ ای
CakePHP - Prado - Zend - ZooPیؿشس بس : ثبقیس و اجش سقساز آب و
( یع بس ؾبیط ای ثطب ب Yeeوكیس یب سفؼ Eذاس ی قز ای بس حطف ) Yiiفطی ضن
سؾظ سقسازی اظ ثطب یؿب 2008اؾز و زض ؾب PHPثطای اؾشفبز ثطب یؿب Platformیه
)ظ دطغ PHP Frameworksؼطة حطف ای و سر ظب ظیبزی ضا ثط ضی دطغ بی سؾق
Prado نطف وطز ثزس فطض قس. ای دطغ ط چس فط علای ساضز ی ث لسضی طط الـ قس و )
ثؿیبضی اظ Yiiزض سر وسبی ساؿش اؾز ؾط ثؿیبضی اظ سؾق زسب ة ضا ث ذز ػت بیس.
یب Yii Software LLCسؾظ قطوز Yiiضا ث اضص ثطز اؾز. دطغ Pradoلبثیز بی دطغ فك
YiiSoft .اضائ قس اؾزYii Frameworkایب و یه ط افعاض ضایب ی ثبقسBSD
License .ضا یع اذص ز اؾز
Yii Frameworkبزخی اس يیضگی ای
Yii سب اظ PHP فطی ضوبیی بس مبیؿ ثب زض .دكشیجبی ی وس ثبلاسط 5ؿرCakePHP ظ و ا
PHP 4 یه وجز ث ؾط یطؾس ی یك ایغض یؿز. فطی ای ؿئ یع دكشیجبی ی وس
9
ضا 5بچبضس و ذیی اظ لبثیز بی ؿر 4ثطای ایؼبز سغبثك ثب ؿر بی CakePHPضوبیی بس
ثب Yii Framework ی و ثبفض ایؼبز سغبثك طزز بزیس ثیطس یب ث ای آب ضا سغییط زس
و اوظط 2011اظ لبثیز بی آ اؾشفبز ی وس ای ؿئ زض ؾب PHP 5سطوع ثط ضی ؿر
.ث قبض ی ضزحبیز ی وس سب یه وجز یؿز ثى یه عیز PHP 5یعثبب اظ
ی اؾز و زض سؾی س MVCاؾشفبز قس اؾز. MVCاظ ای عطاحی Yiiزض ؾبذز فطی ضن
–س–ط افعاض قطفی ی قز زض ای س اػعای ثطب ث ؾ لؿز انی وشط وس
ضا ضفبیز وطز اؾز ای MVCسبی لافس Yii. سمؿییكسػطیبسازبزضآجطلطاضیكز1زیسب
زض قى ظیط آس اؾز: MVCوبضی
ی طایی ث فا یه ان ای ضفبیز قس اؾز زؾشطؾی ث ق Yii. زض یه حیظ وبلا قی طا
چیع حشی زؾشطؾی ث ػسا ثبه اعلافبسی ضاثظ ... یع زض لبت قی طایی سقطیف ی قز و ای
و چب اظ زؾشطؾی بی ضاثغ ای دكشیجبی ی CakePHPؿئ زض مبث فطی ضوبیی ظ
اؾز.وس یه عیز فس
01
یه لبثیز ثطب یؿی اؾز و سف اظ آ genericحبیز ی وس. genericاظ لبثیز ثطب یؿی
دكشیجبی اظ ااؿ زاز بی ضزی ثس لیس حسزیز ؿ اؾز ث فا یىی اظ ضقب سىیه بی
ی ثطب یؿی اؾشفبز ی قز.
اؾز و لبثیز بی فق JavaScriptثطاؾبؼ ظثب Platformیه JQuery .JQueryبی ثب
بی Platformثب ای Yii Framework اقبز ثهطی ضا زض حیظ وبضی وبضثط ایؼبز ی وس.
ضا فطا ی وس. AJAX اىب اؾشفبز اظ لبثیز بی اضسجبط ؿشمیی ضا ایؼبز ی وس
ضقی ثطای سغبثك ثب قی طایی اؾز. اظ Object Relational Mappingدكشیجبی ی وس. ORMاظ
یه ثبه ORMزض ضـ صا یه ثبه اعلافبسی ضاثغ ای اؾز MySQLآؼبیی و ثبه اعلافبسی
ؾبذش ی قز فیبر ثط ضی آ ثب اؾشفبز اظ ضـ قی طا MySQLاعلافبسی ؼبظی اظ ثبه انی
ی قز. ثطای ثطب Updateه اعلافبسی ؼبظی ثط ضی ثبه انی اؼب ی قز ؾذؽ ای ثب
Datasetف ثبه اعلافبسی ؼبظی زض لبت ADO.NETای ضؿ آقب اؾز زض NET.یؿب
اضائ ی قز.
ثؿیبض دیكطفش ثطای وبض ثب ثبه Cachingاظ یه حبز Yii . دیكطفش Cachingاؾشفبز اظ حبز
سی اؾشفبز ی وس و یه عیز فس اؾز ثبفض ؾجه قس فضبی وبضی افعایف ثؿیبض ظیبز اعلافب
زض مبیؿ ثب چس فطی ضن قطف اؾز Yii Frameworkثبظزی یكز. ث زاضی و قطف ثبظزی
سػ ویس :
00
یی ذز اؾز.ثؿیبض ثیكشط اظ ضلجبی لس Yiiكبس ی قز یعا ثبظزی آظبیف قس ثطای
ضز اظ یػی بی زیط :چس
AJAXدكشیجبی اظ -
MultipleDBدكشیجبی اظ ثبه اعلافبسی چس ب -
Templatesدكشیجبی اظ -
Modules دكشیجبی اظ -
Authentication دكشیجبی اظ -
Validationدكشیجبی اظ -
پیص ویاسای قبل اس ضزيع کار
یس ثب ان ای ثطب یؿی آقبیی زاقش ثبقس. چی ان ای وبضثط ثب Yiiثطای قطؿ وبض ثب
ضطضی اؾز. وبضثط ثبیس ثب فبی قی طایی چی ثبه PHPعطاحی ة آقبیی ثب زؾشضار
بی اعلافبسی آقب ثبقس. سقسازی اظ دیف یبظ ب زض ظیط آس اؾز:
XHTML -
CSS -
JavaScript & JQuery -
PHP -
Object Oriented Programming -
SQL Language & PhpMyAdmin -
کزد تلیذمی تان Yiiچ بزوام ایی را با
بؾت ثطای عطاحی ؾبیز ب ثطب بی سحز ة ثب سطافیه ثبلا اؾز. ؾبیز بی Yiiفطی ضن
سیطیز حشا اظ ػ ثطب بیی ؿشس طسجظ ثب سؼبضر اىشطیه، دضسب ب، فط ب ؾیؿش بی
02
آب ضا دیبز ؾبظی ز.ایز، ؾطفز وبضایی اظ ػ شطی كره بی Yiiو ی سا سؾظ
یه فط ضن بؾت ثطای دیبز ؾبظی ؾبیز بی حطف ای Yiiؿشس. Yiiثطب بی سیس قس سؾظ
لبثیز بی ؿشطـ ظیبزی ضا زض اذشیبض وبضثطا ذز لطاض ی زس. دیكطفش ثب یعا وبضایی ثبلا اؾز
Yii Frameworkوصب
هت فطی ضن قب طاح ظیط اؾز :
دیكبز بؾت ضا هت بیی. host serverضا زاضی ثبیس localhostاط لهس هت فطی ضن ثط ضی
ثطب بی زیط بس اظ ط چس ی سا اؾشفبز بییسXAMP Serverی قز و اظ ط افعاض
Wamp Server یع اؾشفبز وطز. ىش ای اؾز و بؾز ضز اؾشفبز اظPHP یب ثبلاسط 5.1ؿر
www.yiiframework.comؾبیز downloadsدكشیجبی بیس.آذطی ؿر فطی ضن ضا اظ لؿز
ی ثبقس. ای فبی ضا اظ حبز فكط ذبضع ی وی. زض یه zipیب tarزضیبفز بییس. ای فبی زض لبت
لطاض ی زی. اط اظ localhostایؼبز قس ضا زض ؿیط yiiلطاض یسی.دق yiiدق ثب فا
XAMP Server اؾشفبز ی وی ای ؿیط چیعی بسC:\xampp\htdocs اؾز اط اظ
Wamp Server اؾشفبز ی ویC:\wamp\www .ی ثبقس
زض ؾبیط بؾز ب ثبیس دق ضز ؾط ضا دیسا وی.ىش : لطاض زاز دق فطی ضن زض ای ؿیط اعای
ا ض Localhost Serverی ثبقس ثقسا ی سا ای ؿیط ضا ث ط ػبی زیط سغییط زاز.زض ای طح
Start ی وی ؾطیؽ بیApache MySQL ضا ضا اساظی ی وی ؾذؽ زض طضط ذز
آزضؼ ظیط ضا ثبظ ی وی :
http://localhost/yii/requirements/index.php
قس ثبیس ثطضؾی Failedاز قس اؾز. عی بی زض ای نفح یبظسی بی ضز یبظ كب ز
PDO extensionذبضع قس. ز ؾطیؽ Failedؾطیؽ بی طسجظ ثب آب فقب طزس سب اظ حبز
PDO SQLite extension ثطای قطؿ ث وبض ثبYii .ضطضی ؿشس ثبیس فقب ثبقس
09
MyComputerبیی ثطای ای وبض زض یسظ زض نفح زض ای طح ثبیس ؿیط بی ؾیؿش ضا انلاح
Advanced Settingsضا اشربة ی وی ؾذؽ زض لؿز Propertiesویه ضاؾز وطز عی
ضا اشربة ی وی زض Environment Variablesاضز ی قی عی Advancedزض لؿز
بة وطز ؿیط لطاض یطی فطی ضن چی ؿیط ضا اشر Pathعی System Variablesلؿی
لطاض زاضز ضا اضبف ی وی بس ظیط : Localhost Serverو زض php.exeلطاض دیطی فبی
C:\xampp\htdocs\yii\framework;C:\xampp\php
حب ؾیؿش ضا یه ثبض ضا اساظی ؼسز یىی.
ساخت ايلیه پزيص
ثطای ؾبذز ای دطغ ث قى ظیط فی ی وی . اثشسا زض یسظ زض لؿز دؽ اظ هت فطی ضن
run فجبضرcmd ضا سبیخ ی وی اضزCommand Prompt یكی.ؾذؽ ثب زؾشضcd اضز ؿیط
web root ی قی ظلا اط اظXAMP Server : اؾشفبز ی وی
Cd C:\xampp\htdocs
ی ؾبذز دطغ ضز ؾط اؾشفبز ی وی :ثطا yiicؾذؽ اظ اثعاض
yiic webapp demo
ضا اضز ی وی yesیب yؾذؽ یه ؾا دطؾیس ی قز و
Create a Web application demo? [Yes|No] yes
04
......
ی قز. ثطای كبس دطغ webrootزض ؿیط ػبضی demoای وبض ثبفض ؾبذز یه دق ثب ب
ؿیط ظیط ضا زض طضط ذز اضز ی وی :ؾبذش قس
http://localhost/demo/index.php
اؾز. ث homepage, about page, contact page login pageنفح 4دطغ ؾبذش قس زاضای
نفح دیف فطو اثشسایی اؾز ثقسا 4ی یس و قب ای skeletonای دطغ ؾبذش قس
نفحبر حشیبر آ سؾظ ب یطایف ی قز.
لطاض زاز قس ثبقس زض غیط ای نضر ثطب pathثبیس حشب زض yii frameworkىش: ؿیط دق
yiic اػطا راس قس ثطای اػطایyiic ثبیس ؿیط فبیphp.exe یع زضpath .ػز ثبقس
yiicخط فزمان رابشا
ثطای ایؼبز یه دطغ ػسیس ث قى ظیط ف ی وی .ث ؾغط فطب Yii Frameworkدؽ اظ هت
ضفش زؾشض ظیط ضا اضز ی وی :
Yiic webapp [path/] project-name
ظب:
Yiic webapp c:\xampp\htdocs\project1
ث قى ظیط اؾز: yiicؾبذشبض وب زؾشض
05
yiic <command-name> [parameters...]
The following commands are available:
- message
- migrate
- shell
- webapp
Messageؾییچ
yiic message <config-file>
config شذیط آ زض یه فبی PHPسطػ یه ش ث آضای لبث ف سؾظ
Migrate ؾییچ
yiic migrate [action] [parameter]
ث وبض ی ضز. database migrationsػز اؾشفبز اظ لبثیز
Shellؾییچ
yiic shell [entry-script | config-file]
ای ؾطیؽ چیبثعاضبیی وبض ی ضز.ث زضذظ فطبای زؾشض ػز وبض ثط یه دطغ ایؼبز قس
زایطوشضی یب ضا زاضز.سنی ی قز وبی زؾشضضا اظ زاذ وشططب،س ب ػز سیس ذزوبض
اذشیبضی ؿشس ؿیطفبی entry-script config-fileدبضاشطبی .ثطب اػطا بییس انی
'index.php'فبی ث عض دیف فطو كز ثطب ضا كب ی زس اط ای ؿیط آضز دیىطثسیجطای
ض ی زایطوشضی ضا كب ی زس.ػز ز
بز ؾبظی زیضا د giiسا سبی فىطز یshellیچ ؾییث ؾ
yiic shell
- controller
- crud
- form
- help
- model
- module
06
Webappؾییچ
yiic webapp <app-path>
حشب ضز app-pathز ؾط اؾشفبز ی قز.ای زؾشض ػز ایؼبز یه دطغ ػسیس زض ؿیط قبذ ط
اط زض و آ زایطوشضی ػز یبظاؾز آ قبذ ای اؾز و زض آ دطغ ػسیس ایؼبز ذاس قس
ساضز ، آ ضا ایؼبز ذاس وطز. ثبیس غئ قیس و زایطوشضی سؾظ وبضثطا ة ؾبیز لبث زؾشطؾی
.ثبقس
ت ضذ :پض ا ي فایلای ساخ
index.php entry script فبی
index-test.php functional tests ثطای entry script فبی
assets/ فبیبی طػـ ضز یبظ و ث عض ذزوبض سیس ی قس. زض نضر حصف
ی قس ی ذز دق جبیس حصف قزحشیبر ای دق ؼسزا سیس
css/ بی انی ثطب CSS قب
images/ بی انی ثطبimageقب
themes/ بی ثطبمبجكب
protected/
ی Application Base Directory و ث آ قب دق ب فبی بی انی ضز یبظ دطغ
وی حشای ای دق ثبیس لبث زؾشطؾی اؾز. applicationیس. ؿیط ای دق اظ عطیك ب ؿشقبض
اظ زؾشطؼ وبضثطا حفػ ثبس.
yiic yiic command line script ثطای Unix/Linux
yiic.bat yiic command line script ثطای Windows
yiic.php yiic command line PHP script
07
commands/ yiic قب زؾشضار
shell/ 'yiic shell' قب زؾشضار
components/ طبقب وبذز بی ث
Controller.php the base class for all controller classes
UserIdentity.php the 'UserIdentity' class used for authentication
config/ فبی سؾیبر ثطب
console.php the console application configuration
main.php the Web application configuration
test.php the configuration for the functional tests
controllers/ قب فبیبی ولاؼ وشطط
SiteController.php the default controller class
data/ قب فبیبی طسجظ ثب ثبه اعلافبسی
schema.mysql.sql the DB schema for the sample MySQL database
schema.sqlite.sql the DB schema for the sample SQLite database
testdrive.db the sample SQLite database file
extensions/
اؾز. third-partyقب ثطب ب اضبفبر
messages/ قب دیببی سطػ قس ثطای چس ظثبی
models/ قب فبیبی ولاؼ س
LoginForm.php the form model for 'login' action
ContactForm.php the form model for 'contact' action
runtime/
08
قب فبیبی لز وىی ؾبذش قس زض حی اػطا اؾز و ث عض اذشهبنی ثطای ؾطیؽ زس
ة ثبیس لبث زؾشطؾی ثبقس.
tests/ ؾىطیذز بی سؿز ثطبقب ا
views/ قب ی بی ثطب
layouts/ قب لبت بی ثطب
main.php the base layout shared by all pages
column1.php the layout for pages using a single column
column2.php the layout for pages using two columns
site/ containing view files for the 'site' controller
pages/ containing "static" pages
about.php the view for the "about" page
contact.php the view for 'contact' action
error.php the view for 'error' action (displaying external errors)
index.php the view for 'index' action
login.php the view for 'login' action
modules/
قب بغ بی ثطب اؾز ط بغ سحز یه دق ؼعا لطاض ی یطز
محیط مىاسب بزای کذ ویسی
اؾشفبز ز یب حشی یطایكطبی شی PHPطسجظ ثب IDEی سا اظ ط ؿ Yiiثطای وبض ثب دطغ
و ب PDTثب Eclipseاضبی حطف ای عطاحی ظ فیس ذاس ثز. اب اثع ++notepadیب notepadظ
PHP Dev Tools اؾز بؾت سط ی ثبقس. چی ثطبnetbeans حیغی بؾت اؾز. اظ زیط اثعاض ب
یع ی سا اؾشفبز ز MS Expression Web یب Microsoft Visual Studioچ
مزاحل د گاو تلیذ بزوام :
09
yiicؾىز ثطب سؾظ ؾبذز ا -1
configافب سؾیبر زض فبی دیىط ثسی -2
giiؾبذز س بی ضز یبظ سؾظ اثعاض -3
giiؾبذز وشططبی ثطب سؾظ اثعاض -4
قش وس بی ضز یبظ زض وشطط ایؼبز اوك ب قش وسبی ضز یبظ زض س یب -5
حسز ؾبظی زؾشطؾی بایؼبز فیطبی ضز یبظ ثطای -6
بی ضز یبظ زض نضر ع themeایؼبز -7
ایؼبز سطػ بی ضز یبظ دطغ -8
cachingاؼب سؾیبر -9
بیی لج اظ اشكبض tune upانلاحبر -10
: چار قسمت اصلی ز بزوام
ط دطغ ایؼبز قس ی ساس زض چبض لؿز ظیط سمؿی ثسی قز.
1- Front end : یه لؿزpublic و وبضثط بیی(end user) ؿشمیب ثب آ اضسجبط ثطلطاض ی وس
یب یه فط ی .. bootstrapبس
2- Back end یه لؿز :Protected و وبضثط بیی ث آ زؾشطؾی ساضز سب ؾطیؽ زس ة
ث آ زؾشطؾیی زاضز.
3- Console یه ثطب و سحز :CLI (Command Line Interface) اػطا ی قز ػز اؼب ثطذی
افب بس دكشیجبی سیطیز دطغ انی ث وبض ی ضز.
4- Web API لؿشی اظ ثطب و ؿئ بض وطز ثب :third-party .ب ی ثبقس
21
MVC اػطای ثطب
MVC چیست ؟
MVC حطف اثشسای ؾ وModel View Controller ؾز و قطف یه س دیبز ؾبظی ط ا
ز بی رشف ثطب ػساؾبظی لؿ اظای س سف غطح ی قز.زض سؾی ط افعاض افعاضی اؾز
لؿز انی ی ثبقس 3قب ث ای و ػطیب زاز ای ثی آب حفؼ قز. ای س زاظ یىسیط اؾ
و فجبضسس اظ :
فبر ی ثبقس چی لای مطضار طثط ث ؿ زاز ب.س : قطف زاز ب اعلا -1
ی : قب اػعای اؾظ وبضثط بس ػقج بی ضزی، فط ب ؾبیط اػعای ضزی ذطػی ی -2
ثبقس.
وشطط : ػطیب زاز ب ثی وشطط ی ضا سایز ی وس. -3
ػساؾبظی وسب حشاب -2 ثیز اؾشفبز ؼسزلب -1فجبضسس اظ MVCاؾشفبز اظ س عایبی انی
: Application
Yii زض وبض سMVC یه ف زیطی ث بApplication ضا یع قطفی ی وس. و ث آ
front-controller .ی یسApplication زضذاؾشبی وبضثط ضا طفش آ ضا ثطای وشطط اضؾب ی
زؾشض اؾز زض ط وؼبی دطغ ی سا اظ عطیك singletonولاؾی اظ ؿ Applicationبیس.
Yii::app() ث آ زؾشطؾی دیسا وطز. ولاؼsingleton ولاؾی اؾز و سب یه قی اظ ضی آ ؾبذش
ی قز یچ ولاؼ زیطی اظ ضی آ ؾبذش راس قس. صا زض ط دطغ سب یشا یه اظ
Application زاقش ثبقی و زض آ یه قی ؾبذش قس اظ ضی ولاؼApplication .یه اؾز
سیس قس ث فا یه قی ضز اؾشفبز لطاض ی یطز RAMزض حبفؾ Application اظ
: ()Yii::appاظ عطیك Applicationزؾشطؾی ث دؽ اظ اسب ثطب اظ حبفؾ دبن ی قز.
هشاذ همادیر //
echo Yii::app()->defaultController;
20
echo Yii::app()->theme;
تغییر ب همادیر //
Yii::app()->name = “My Project Name”;
ؾبذش ی قز و زض ؿیط CWebApplicationولاؼ سؾظApplicationط
yii\framework\web\CWebApplication.php ط لطاضیطی لطاض زاضز.ؿیyii.php ث قى ظیط
سقیی ی قز:
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
زض آ افب قس configاؾز و سؾیبر yii ای ؾبذش قس اظ ضی ولاؼ applicationدؽ
آ دق و ث ح لطاض یطی فبیب دق بی انی ثطب اؾز Protectedاؾز.دق
Application صا یه فبی رفی ثب ب بیس اظ زؾشطؼ زیطا حبفؾز قز ث یع ی یس
.htaccess ایؼبز وطز حشای آ ضا ثطاثطdeny from all : لطاض ی زی.آزضؼ زؾشطؾی ث آ
dirname(__FILE__).'/protected
: Entry Script
Entry Script فبی ثindex.php فش ی قز و قی انی ثطب یقی ػز زض قبذ انی
Application ضا ایؼبز ی وس. ث فبیindex.php انیEntry Script یب اؾىطیذز ضزی فش ی
22
قز.زض ای فبی سؾیبر زیطی یع لطاض زاز ی قز. حشای ای فبی ث عض دیف فطو ث قى ظیط
اؾز.
// change the following paths if necessary
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in
each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication($config)->run();
$yii ؿیط لطاض یطی :yii.php ضا كرم ی وس و ث آBootstrap .فش ی قز
$config ؿیط لطاض یطی فبی :Application یب بconfig file .ضا كرم ی وس
defined('YII_DEBUG') or define('YII_DEBUG',true); زض حبزdebug mode اظ ای
ی یی زیط یبظی ث Production modeؾبیز و ث آ publishوس اؾشفبز ی قز ب
ای وس یؿز.
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); اط حبز
logging .فقب ثبقس كرم ی وس و ط چس ؾغح ذغب ثبیس زض یه دیب كب زاز قز
require_once($yii); فبیyii.php فطاذای ی وس.ضا
Yii::createWebApplication($config)->run(); سؾظ ای زؾشض یه اظ ولاؼ
Yiiؾبذش ی قز دبضاl سطبی ػز زض فبیconfig .زض آ افب ی قس ؾذؽ اػطا ی قز
: Bootstrap
وبضثط زضذاؾشبی و وی اؾز Frameworkػز زض yiic.phpب فبی bootstrapاؾىطیذز
سب اؾىطیذشی اؾز و وبضثط Bootstrap ضا زض زضیبفز ی وس ثطای وشطط طثع اضؾب ی وس.
اػطا ی قز ثمی bootstratؾبیز ی ساس ث آ زؾشطؾی ؿشمی زاقش ثبقس. ثب ط زضذاؾز وبضثط
وبضب ضا زجب ی وس.
29
Config :
ضا زض فبی configفبیی اؾز و سؾیبر وی دطغ زض آ لطاض زاضز.ؿیط فبی Configفبی
bootstrap : ث قى ظیط سقیی ی وی
$config=dirname(__FILE__).'/protected/config/main.php';
ػز زض yiiBase.phpزض الـ ای اظ فبی bootstrapؾبذش قس سؾظ applicationط
framework اؾز و سؾیبرconfig :زض آ افب قس اؾز
Yii::createWebApplication($config)->run();
Config زض الـ آضای ای اؾز و مبزیط سؾیبر دطغ زض آ لبث سقطیف اؾز.اط فبیconfig
بیشب ضا ث یه مغ ی سا آ ضا زض چس فبی ػسا سمؿی وطز ثبقسذیی دیچیس علای
شذیط قس ثبقس یب زض protected/config/main.phpی ساس زض فبی configكشطن دیس زاز.
ی سا آ ضا زض فبی زیطی لطاض زاز Productionیه فبی زیط و ثطای ایز ثیكشط زض ب
ز.انی ثطب انلاح index.phpضا زض Configؿیط
configؿیط دیف فطو
protected/config/main.php';
configظبی اظ ح اؼب سؾیبر زض
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
سب یه آضای اؾز ث قى : configحشای وی
<?php
return array(...);
?>
ی زاذی ثطای سؾیبر رشف سقطیف ی قس.زض لؿز ... آضای ب
اػ قی ی زض حی اػطای ثطب date_default_timezone_setاط ثب اقىبی زض ضز سبثـ ىش :
ضا زض فبی سؾی ظیط ضابؾجی یؿز ی سا چسا ضا سغییط زاز و ضـ php.iniسا فبی
config بی اضز وطز كى ح ذاس قس.زض ب اثشسا ی ف
'timeZone'=>"Asia/Tehran',
24
اواع حالت اجزای بزوام :
ی ساس زض ز حبز شفبر اػطا قز : Yiiثطب
Debug Mode – 1
اػطای ثطب زض حبز ؾبذز و ثب طجز ضیسازبی ظیبز كب زاز ذغبب طا اؾز ثطای حبز
یع ی یی. Development Modeبؾت اؾز وبضایی وشطی زاضز. ای حبز ضا ثطب یؿی
Production Mode - 2
بی ذغبیبثی طجز ضیسازبی وشط. حبزاػطای ثطب وب قس ثب وبضایی ثبلا
وس ظیط ضا یطایف ی وی : index.phpاػطای ثطب زض فبی Modeثطای سقیی
ای وس ضا حصف Production Modeوس ظیط ضا اضبف وطز ثطای حبز Debug Modeثطای حبز
ی وی.
defined('YII_DEBUG') or define('YII_DEBUG',true);
مزاحل ساخت بزوام :
yiicسؾظ فطب skeletonؾبذز
زض ثطببی ضز یبظ component ؾبذز configاؼب سؾیبر ای ثطب زض فبی
giiؾبذز س ب سؾظ اثعاض
giiؾبذز وشطط بی ضز یبظ سؾظ
giiزض Crudؾبذز اوك ب ی بی طثع سؾظ
ؾبذز فیشطبی ضز یبظ ثطای اوك ب
بی ضز یبظ زض نضر ع themeؾبذز
ی زاقش ثبقس.ؾبذز دیببی سطػ قس زض نضسی و ؾبیز یبظ ث لبثیز چس ظثب
زض نضر یبظ. cachingدیبز ؾبظی سىیه بی
25
Tune up بیی اشكبض ؾبیز
ضا فقب دیبز ؾبظی ز. testىش : ثطای ط وسا اظ طاح ز ب ثبلا ی سا
: مزاحل اجزای یک بزوام
ث قى ظیط ی ثبقس : Yiiػطیب وبضی زض
ى ظیط اضز ی وس :وبضثط زضذاؾشی ضا ث ق
http://www.example.com/index.php?r=post/show&id=1
اؾز زضیبفز ی index.phpو ب فبی bootstrapؾطیؽ زس زضذاؾز ضا ث اؾغ اؾىطیذز
وس.
configضا ثب افب سؾیبر كرم قس زض فبی Applicationاظ یه bootstrapاؾىطیذز
سؾظ فطب ظیط اؼب ی قز : index.phpایؼبز وطز اػطا ی وس. ای وبض زض فبی
Yii::createWebApplication($config)->run();
26
application زضذاؾشبی وبضثط ضا سؾظ یهcomponent ث بrequest component زضیبفز ی
بیس.
آزضؼ زاز قس ضا سحی وطز urlmanager componentسؾظ applicationؾذؽ
controller action .ضز زضذاؾز ضا كرم ی بیس
postController.phpػز زض فبی postControllerب زاضز و ولاؼ postزض ظب ثبلا وشطط
زض ولاؼ وشطط اقبض actionShowب زاضز و ث شس showوك ضز ؾط اقبض زاضز. چی ا
اؾز. 1ثب مساض idزاضز. دبضاشط اضؾبی یع
ؾبذش قس اػطا ی طزز. زض ای applicationسؾظ postControllerؾذؽ یه اظ وشطط
اػطا ی actionShowشطب اػبظ زس شس وشطط فیشط بی ضز ؾط افب قس زض نضسی و فی
یب غیط ثبقس. access control, benchmarkingقز. فیشطب ی ساس
آ idضا فطاذای ی وس و یه ضوضز اظ ػس ثبه اعلافبسی اؾز و Postیه اوك سی ثب ب
اؾز. 1ثطاثط
وه ی Post اػطا( ی وس چی اظ س )فطاذای renderضا showاوك یه ی ث ب
یطز.
ذاس بیف ی زس. Postاعلافبر ضز ؾط ضا اظ س show ی
ب ضا ثطای بیف اعلافبر ث وبض ی یطز. widgetی سقسازی اظ
لطاض ی یطس سب یه نفح وب ة سكىی طزز. layoutحشیبر ی زاذ یه
بر ذز ضا ث دبیب ی ضؾبس نفح ؾبذش قس ضا ثطای وبضثط بیف ی زس.اوك فی
27
کىتزلز
: اومدار ارث بزی ای کىتزلز
معزفی کىتزلز :
لطاض ی یطس. زض اثشسای قطؿ ثطب یه اظ وشطط protected/controllersفبی وشطط ب زض قبذ
ؾبذش ؾذؽ اػطا ی قز. ط وشطط زاضای یه ب حهط ث yiiBase.phpی یقی فب Bootstrapسؾظ
ی ثبقس. وشطط قب سقسازی اظ اوك ب ی ثبقس و ثط اؾبؼ زضذاؾشبی وبضثط ControllerIDفطز یب
ی وبض ذبنی ضا اؼب ی زس. وشطط اضعطیك اوك ب، ػطیب زاز ثی س ب یب ضا سیطیز
قطؿ یكز.وبضثط زض actionزض الـ شس ػز زض وشطط اؾز و حشب ای شس ثب و Actionوس.
ضا شوط ی وس ظ : actionفطاذای بیف و
www.hostname.com/index.php?r=site/view
CComponent
CBaseController
CWidget
CController
Controller (components Folder)
SiteController (controllers Folder)
28
اؾز و و actionViewفطاذای یكس ی ب شس زض ان view اوك siteظب وشطط زض ای
action آ شوط ی طزز ای ثبفض افعایف ایز یع ی قز. ظیطا و وبضثط ؿشمیب ب فبی ضا شػ
ی قز. ح سقطیف یه اوك ػسیس :
class UpdateAction extends CAction
{
public function run()
{
// place the action logic here
}
}
اوك ی ساس دبضاشطبیی ضا زاقش ثبقس و ای دبضاشطب ذز وبض ی ثبقس مساض آب سؾظ
$_GET .اظ وبضثط زضیبفز ی قس
پارامتزای خدکار اکطه
اظ وبضثط GET_$ضاشبیی ضا ثطای آ سقطیف ز و مبزیط آب ضا اظ عطیك یه شس اوك ی ساس دب
ایؼبز createزضیبفز بیس.زض حبشی و رای اظ دبضاشطب ذزوبض اؾشفبز بیی اط یه اوك ثب ب
ثبقس و category languageسقطیف قس ثبقس زاضای ز دبضاشط PostControllerبیی و زض وشطط
مبزیط آب ضا اظ ضزی ثیطز وس یؿی علای ظیط ضا ذای زاقز :
class PostController extends CController
{
public function actionCreate()
{
if(isset($_GET['category']))
$category=(int)$_GET['category'];
else
throw new CHttpException(404,'invalid request');
if(isset($_GET['language']))
$language=$_GET['language'];
else
$language='en';
// ... fun code starts here ...
29
}
}
شطبی ذزوبض ؼسزا ی وشطط ضا سقطیف ی بیی. و زاضای وس یؿی ؾبز حب ثب اؾشفبز اظ دبضا
ی ثبقس. ث قى ظیط
class PostController extends CController
{
public function actionCreate($category, $language='en')
{
$category=(int)$category;
// ... fun code starts here ...
}
}
سقساز دبضاشطب ب آب ثبیس زلیمب ثب آ چیعی و وبضثط اضز ی وس سغبثك زاقش ثبقس ثطای وس ثبلا
زضذاؾشی ظ وس ظیط لبث لج اؾز:
www.hostname.com/index.php?r=Post/categoory=1&language=fa
ضخ 400اط وبضثط زضذاؾشی ثسس و اظ ای ا یب ابی ضز لج ای ا دیطی ىس یه ذغبی
زض نضسی و وبضثط ای 'language='en$ثبلا زاضای یه مساض دیف فطو اؾز languageی زس. دبضاشط
س ذغبیی ضخ ی زس مساض دیف فطو ثطای آ زض ؾط طفش ی قز. اب چ دبضاشط ضا اضؾب ى
category مساض دیف فطو ساضز زضذاؾشی و دبضاشطcategory .زض آ جبقس ثبفض ثطظ ذغب ذاس قس
class PostController extends CController
{
public function actionCreate(array $categories)
{
// Yii will make sure $categories be an array
}
}
وبض وس و یه GET['categories']_$وبضثط ی ساس ثب ثبیس قش قز. arrayزض ای حبز و ویسی
ضقش فبزی اؾز ی یشا آ ضا ث یه آضای سجسی وطز اظ فبنط آ آضای اؾشفبز ز.
ضا زضذاؾز ی وس، وشطط یىی اظ وبضبی ظیط ضا اؼب ی زس : XYZی و وبضثط یه اوك ظ لش
Method-based action یقی ایى شس :actionXYZ ی وس. ضا زض نضر ػز فطاذای
91
Class-based action یقی ایى یه اظ ولاؼ :XYZ ضا زض نضر ػز ثز ولاؼ زضaction class
map ی وس. فطاذایایؼبز ی وس. ؾذؽ اوك ضا
Call missingAction 404 : یقی ایى ث عض دیف فطو یه ذغبی HTTP .ضا سیس ی وس
ضا ث defaultActionاػطا ذاس قس.defaultActionاط وبضثط یچ اوك كرهی ضا زضذاؾز سس اوك
زض اثشسای ولاؼ وشطط سقیی ز. فا یه شغیط ی سا
وشطط ى اؾز و ثراس لج یب ثقس اظ اػطای یه اوك فیشطبیی ضا اػطا وس.
پارامتزای عممی قابل تعزیف در کىتزلز :
public $layout سقطیف لبت :
سقیی ز و ث عض ی سا لبت دیف فطو ثطای اؾشفبز زض یبی ضز اؾشفبز زض ای وشطط ضا
سقطیف قز یچ لبجی اؾشفبز ی قز. ظب : falseی ثبقس. اط مساض آ mainدیف فطو
public $layout='//layouts/mylayout;
CWebModule::layoutاط وشطط زض یه بغ لطاض زاقش ثبقس ی سا ثطای سقیی لبت اظ زؾشض
module layout ی قز. اؾشفبز
'public $defaultAction='indexسقطیف اوك دیف فطو :
اوك دیف فطو ثطای اػطا كرم ی قز. زض ایهضر اط زض، زضذاؾز وبضثط اوك كرم كز
ی actionIndexاؾش ثبفض اػطای اوك 'index'ای اوك دیف فطو اػطا ی قز. اجش اظ اثشسا مساض آ
قز.ظب :
public $defaultAction='myAction';
متذای قابل استفاد در کىتزلز :
public function init)(
لج اظ قطؿ اػطای وشطط اػطا ی قز. applicationمساض زی ای ی وس. ای شس سؾظ وشطط ضا
ػطای وشطط ضا افب بییس.ویس سب ثشایس سؾیبر دیف اظ ا overrideى اؾز قب ای شس ضا
90
public function filters)(
فیشط ضا ثط ی طزاس. ای شس آضای ای اظ مبزیط فیشط ضا ثط ی طزاس و ط وسا اظ ای شس سؾیبر
فبنط آضای طثط ث ط یه اظ فیشط ب ؿشس. وشطط ى اؾز و ثراس لج یب ثقس اظ اػطای یه
ك فیشطبیی ضا اػطا وس.او
فیشط ب ی ساس لج یب ثقس اظ زضذاؾز یب دبؾد ث وبضثط اػطا قس ى اؾز ػی اػطای یه
اوك ضا ثیطس. زض نضر ع فیشط ب ی ساس زض یه سطسیت ذبل اػطا قس. زض ایهضر اط زض ط
ضا ثط طزاس ثمی فیشطب اوك ب اػطا راس قس. trueساض طػ ای اظ اػطا ط یه اظ فیشط ب م
فیشطب ی ساس ث نضر یه قی ؾبذش قس اظ ضی یه ولاؼ ؼعا ثبقس یب ث نضر شسبی
ث قى ظیط اػطا ی قس. ظب : filtersوطز شس overrideسقطیف قس زض ولاؼ وشطط. فیشط ب ثب
<pre>
array(
'accessControl - login',
'ajaxOnly + search',
array(
'COutputCache + list',
'duration'=>300,
),
)
</pre>
ز فیشط accessControl, ajaxOnly, COutputCacheفیشط سقطیف قس اؾز و فجبضسس اظ 3زض ظب ثبلا
CControllerثط اؾبؼ شس ؾبذش قس اس. و شس آب زض ولاؼ ,accessControl, ajaxOnlyیقی ا
سقطیف قس اؾز و ث فیشط وطز شس ب زض ولاؼ وشطط اقبض ی وس.
ی ثبقس system.web.widgets.COutputCacheزض حبی و ؾی فیشط اظ ؿ قی اؾز و ولاؼ آ
ظب زیطی ث قى ظیط اؾز : لطاض طفش اؾز. 300 مساضآ ثطاثط durationدبضاشط
class PostController extends CController
{
......
public function filters()
{
return array(
'postOnly + edit, create',
array(
92
'application.filters.PerformanceFilter - edit,
create',
'unit'=>'second',
),
);
}
}
وس ثبلا ز فیشط ضا سقطیف ی بیس.
ؿیط لطاض یطی ای ولاؼ زض ؿیط –PerformanceFilterولاؼ postOnlyشس فیشط
application.filters.PerformanceFilter اؾز و ولاؼ فیشط ضز ؾط زض فبیPerformanceFilter.php لطاض
ثطای آ اضؾب ی قز. secondاؾز و مساض unitثب ب propertyزاضز. و زاضای یه
postOnlyفط + : كرم ی وس و ای فیشط ثطای وسایه اظ اوك ب اػطا قز. زض ظب ثبلا اوك
اػطا قز. edit createثبیس ثطای اوك بی
: كرم ی وس و ای فیشط ثبیس ثطای وسایه اظ اوك ب اػطا كز. زض ظب ثبلا فیشط -فط
PerformanceFilter ثطای اوك ب ث ػعedit create .ثبیس اػطا قز
ط ثطای اوك ب اػطا ی قز.یب + زض فیشط كرم كز آ فیش –ىش : اط
ث نضر filterXYZثطای فیشطبیی و ثط اؾبؼ شس ؾبذش قس اس یه شس ثب ب
(filterXYZ($filterChain سقطیف ی قز و ب ای فیشطXYZ .اؾز
دیسا وس ظؼیط اػطایی ازا حشب قش قز سب filterChain->run$ىش : زاذ شس فیشط ثبیس وس )(
ظؼیط اػطازض ی مغ دبیب ی دصیطز.ط
ثبقس اوك بی طثع اػطا راس قس. falseىش : اط مساض ثطكشی یه شس فیشط
فیشطب ی ساس ث ای سقطیف قس و سب ظبی اػطا قس و یه اوك ذبل اػطا ی قز. ثطای
زض سقطیف فیشط اؼب ی قز. فط + كرم –ای وبض ث ؾی فطبی + فیشطبی ثط اؾبؼ شس
ث ای –ی وس و فیشط سب ظبی اػطا قز و یه فیشط ث ذهل فطاذای قز زض حبی و فط
ضز.ثطای قی اؾز و فیشط سب ظبی اػطا ی قز و ای اوك زض یب اوك بی زضذاؾز لطاض سا
ب ولاؼ ضا زجب ی وس. –اوك بی ثط اؾبؼ قی فط +
فیشط ب ث ز زؾش سمؿی ی قس :
99
1- inline filter :و فیشطبی ثط اؾب شس ؿشس. ای سقطیف آب ث قى ظیط اؾز :
FilterName[ +|- Action1, Action2, ...]
و وسا اوك ثبیس/جبیس فیشط صاضی قز.كرم ی وس –و فطبی +
2- class-based filter .و فیشط طثع ث ؾی یه قی ؾبذش قس اظ ضی ولاؼ سقطیف ی قز :
:اضص ثطی ی وس. ظب Cfilterای ولاؼ اظ ولاؼ
class PerformanceFilter extends CFilter
{
protected function preFilter($filterChain)
{
// logic being applied before the action is executed
return true; // false if the action should not be executed
}
protected function postFilter($filterChain)
{
// logic being applied after the action is executed
}
}
قطیف ای فیشط ث قى ظیط اؾز :ح س
<pre>
array(
'FilterClass[ +|- Action1, Action2, ...]',
'name1'=>'value1',
'name2'=>'value2',
...
)
</pre>
'name1'=>'value1' زض ای ؾبذشبض مبزیطproperty .بی فیشط ضا كرم ی وس
ىش : ثطای اضص ثطی فیشطب اظ یىسیط یه ولاؼ فطظس ثبیس ثب ولاؼ اس ذز ازغب قز و ای وبض ی
اؼب یطز. array_mergeساس سؾظ ساثقی ظ
public function actions)(
94
ؾز و ای شس یؿشی اظ اوك بی ػز زض ولاؼ ذبضػی ضا ثط ی طزاس. ای شس قب آضای ای ا
فبنط آ اوك ب ولاؾبی آب ضا كرم ی وس. ظب :
'edit'=>'application.controllers.article.EditArticle'
فطاذای 'application.controllers.article.EditArticle'زض ولاؾی ث ؿیط editزض ای ظب اوكی ثب ب
فطاذای اؾشفبز اؾز.چی ی سا دبضاشطبیی ضا یع ث ی قز اظ ای ث ثقس زض ای ولاؼ لبث
اوك فطاذای قس اضؾب . ظب :
<pre>
return array(
'action1'=>'path.to.Action1Class',
'action2'=>array(
'class'=>'path.to.Action2Class',
'property1'=>'value1',
'property2'=>'value2',
),
);
</pre>
یع طا ثب propertyاؾز ز 'path.to.Action2Class'سقطیف ی قز و ؿیط آ action2زض ظب ثبلا
فطاذای اضؾب ی قز.
لاؼ وشطط ب كشك قز سؾظ یىی زیط اظ وبضثطزبی ای شس ای اؾز و اط یه ولاؼ وشطط اظ و
ای شس ی ساس اوك بی ولاؼ اس ذز ضا فطاذسی بیس.
ىش : ثطای اضص ثطی اوك ب اظ یىسیط یه ولاؼ فطظس ثبیس ثب ولاؼ اس ذز ازغب قز و ای وبض ی
اؼب یطز. array_mergeساس سؾظ ساثقی ظ
فطاذای بییس. ظب : CWidget::actionsظ action providerب ضا اظ یه قب چی ی سایس اوك
<pre>
return array(
...other actions...
// import actions declared in ProviderClass::actions()
// the action IDs will be prefixed with 'pro.'
'pro.'=>'path.to.ProviderClass',
// similar as above except that the imported actions are
values
'pro2.'=>array(
'class'=>'path.to.ProviderClass',
95
'action1'=>array(
'property1'=>'value1',
),
'action2'=>array(
'property2'=>'value2',
),
),
)
</pre>
ب ثبیس ثطای action providersؾبیط سقبضیف اوك ػسا وطز ای ثطای ضا اظ action providersزض ظب ثبلا ب
قبذش ی قز و زض action1ث فا pro2.action1سقطیف اظ یه مغ اؾشفبز بیی ثبثط ای ظلا
ProviderClass .سقطیف قس اؾز
public function behaviors)(
ذز كب زس ثط ی طزاس. ای شس قب آضای ای اؾز و زض آ یؿشی اظ ضفشبضب ضا و وشطط ثبیس اظ
. ط ضفشبض ی ساس یه ضقش قطف ؿ ضفشبض name=>behaviorب ضفشبض مساض آ كرم ی قز ظ
ولاؼ ثبقس یب یه آضای ثب ؾبذشبض ظیط زاقش ثبقس :
<pre>
'behaviorName'=>array(
'class'=>'path.to.BehaviorClass',
'property1'=>'value1',
'property2'=>'value2',
)
</pre>
قطفی ی 'path.to.BehaviorClass'یه ضفشبض اؾز و زض ولاؾی ثب آزضؼ 'behaviorName'زض ظب ثبلا
قز ز دبضاشط ثب مبزیط كرم قس ضا زضیبفز ی وس.
اضص ثطی CBehaviorاؾشفبز وس یب اظ ولاؼ IBehaviorثبیؿشی اظ اؾظ behaviorولاؼ سػ ویس و
ث ولاؼ وشطط applicationبیس. ضفشبضبی سقطیف قس زض وشطط زض ظب ؾبذز وشطط سؾظ
حك ی قس.
CComponent یب زض ولاؼ PHPسضیحبر سىیی زض ضز ضفشبضب ضا ی سا زض ضابی قی طایی زض
كبس ز.
public function accessRules)(
96
ای شس فیشطبی زؾشطؾی وبضثط ث اوك بی وشطط ضا كرم ی وس. ث فا ظب كرم ی وس
و وسا وبضثط ؼبظ ث اػطای وسا اوك ی ثبقس یب ی ثبقس.
وطز ط آزضؾی اضز آ نفح قز اظ ای لؿز اؾشفبز ی قز. ثطای ای و ط وبضثطی شاس ثب اضز
ضا اػطا وس. Postىطز ی ساس وشطط loginظلا وبضثطی و اضز ؾبیز كس یقی
ثطای ط یه یب چس اوك ی سا یه آضای ػسا سكىی زاز ح زؾشطؾی وبضثطای و ی ساس اظ
كرم وطز.آ اؾشفبز وس ضا
ثطای قطفی وبضثطای و اضز ؾبیز قس اس @اظ وبضاوشط * ثطای قطفی وطز وبضثطا اظ وبضاوشط
اؾشفبز ی وی چی اظ فلای ؟ ثطای وبضثطا بقبؼ اؾشفبز ی قز. ط سذ آضای ثطای ای شس
ث قى ظیط سقطیف ی قز :
array('deny or allow',
'actions'=>array('action1','action2',…),
'users'=>array('@ or *')
),
ثبفض ی قز و سذی ثب قى ظیط ایؼبز ی وس و ثطای Crud generatorزض اؾشفبز اظ اثعاض giiاثعاض
اػطای اوك بی وبضثط ثبیس آ ضا انلاح ز ط اوك بی وبضثط اػطا راس قس.
array('deny', // deny all users
'users'=>array('*'),
),
غیط Ip, Roles, Controllers, Verbs, Expressionدبضاشطبی زیطی ظ زض ای اوك چی ی سا
كرم اػبظ اؾشفبز اظ Ipی سا اؾشفبز وطز سب وبضثطای ثب Ipsضا یع اؾشفبز وطز ث فا ظب اظ
اؾشفبز ی قز و ثطای Rolesضا زاقش ثبقس یب ساقش ثبقس. ثطای سیطیز طب یع اظ ؾبیز
طاػق بییس. RBACسضیحبر ثیكشط ث یىی دسیب ثرف
97
ضـ زیط ای وبض سقطیف یه قطط اؾز ظ:
array('allow',
'actions'=>array('admin'),
'expression'=> 'Yii::app()->user->group == 3',
),
public function run($actionID)
ای شس ب یه اوك ضا طفش آ ضا اػطا ی وس. فیشطبی اوك ضز ؾط یع اػطا ذاس قس. اط
ضخ ی زس. CHttpExceptionاوك ضز ؾط دیسا كس یب ب اوك نحیح اضز كس ثبقس یه
public function runActionWithFilters($action,$filters)
ای شس یه فیشط ضا ثب یه فیشط كرم قس اػطا ی وس. یه ظؼیط فیشط زض ای طح ایؼبز قس
ؾذؽ اوك ضز ؾط اػطا ی قز.
public function runAction($action)
اوك اػطا ی وس. ای شس یه اوك ضا دؽ اظ افب سبی فیشطب طسجظ ثب ای
public function createAction($actionID)
یقی inlineای شس یه اظ اوك قطفی قس ضا سیس ی وس. ای اوك ی ساس یه اوك
یقی سقطیف قس زض ولاؼ ذبضػی objectسقطیف قس زض زاذ ی ولاؼ وشطط ثبقس یب یه اوك
س ثبقس.ؾذؽ ؾبظی ق
public function missingAction($actionID)
ای شس ثطضؾی ی وس و آیب اوك قطفی قس ػز ی ثبقس یب ذیط زض نضسی و ػز جبقس
یه ذغب نبزض ی وس.
public function getRoute)(
ضا ثط ی طزاس. module ID, controller ID and action IDای شس ضقش سمبضبی ػبضی ث قى
public function getAction)(
ضا ثط nullای شس ب اوك فقب ضا ثط ی طزاس. زض نضسی و یچ اوك فقبی ػز ساقش ثبقس مساض
ی طزاس.
98
public function getId)(
ای شس ب وشطط ػبضی ضا ثط ی طزاس.
public function getUniqueId)(
شس یع ب وشطط ػبضی ضا ثطی طزاس شی اط ای وشطط زاذ بغی ثبقس ب آ بغ ضا یع ای
ModuleID.ControllerIDثط ی طزاس. ث نضر
public function getModule)(
ػز جبقس ای شس ب بغی و وشطط زض آ لطاض طفش ضا ثط ی طزاس. زض نضسی و یچ بغی
ضا ثط ی طزاس. nullمساض
public function getViewPath)(
ای شس ؿیط لطاض یطی یبی ضز اؾشفبز زض ای وشطط ضا كرم ی وس. ؿیط دیف فطو
protected/views/ControllerID ی ثبقس و ی سا آ ضا سغییط زاز. ولاؾبی فطظس ای ولاؼ وشطط ی
وس ؿیط زرا ذز ضا ثطای لطاض زاز فبیبی ی لطاض زس. اط وشطط overrideاس ای شس ضا س
ػبضی زض یه بغ لطاض طفش ثبقس ؿیطی و ای شس ثط ی طزاس قب ب آ بغ یع ذاس ثز.
public function getClips)(
ضا ثط ی طزاس. یه ویخ لؿشؽ اظ شبیغ ث ػز آس سؾظ ای شس یؿشی اظ ویخ بی ذطغ
دطغ اؾز و ی ساس سحز لبت یه ب كرم لطاض یطز زض ػببی رشف ثطب فطاذای قز.
public function forward($route,$exit=true(
. ای وبض قجی فىطز زؾشض ای شس زضذاؾز وبضثط ضا سؾظ اوك زیطی زض وشطط اػطا ی وس
redirect اؾز ثب ای سفبر و ثب اػطای ای شسURL ػز زض طضط وبضثط سغییطی ی وس. زض ثؿیبضی
ؿیط اوكی routeث وبی اؾشفبز اظ ای شس اؾشفبز وطز. دبضاشط URLاظ اضز ثشط اؾز و اظ زؾشض
ای ی ساس سب قب ب آ اوك ثبقس و زض ی ولاؼ و ثبیس اػطا قز ضا كرم ی وس.
99
یه مساض exitوشطط لطاض طفش یب یه ؿیط وب قب ؾبیط اػعا بس بغ ب ثبقس. دبضاشط
true/false ضا ی یطز اطtrue .ثبقس یقی ثطب دؽ اظ اػطای ای شس دبیب دصیطز
public function processOutput($output(
renderضا دطزاظـ ی وس. ای شس زض دبیب اػطای شس renderای شس ذطػی بی سیس قس سؾظ
ثطای ای نفح كرم قس آب یع ث dynamic contents یب scriptsاػطا ی قز.اط renderTextشس
وبض اؾز.نفح اضبف ی قس ؽیف انی ای شئ اؼب ی
public function render($view,$data=null,$return=false)
ضا فطاذای ی وس سب ی ضا ث renderPartialای شس یه ی ضا ثب لبت آ اػطا ی وس. ای شس اثشسا
قى سبیی اػطا وطز ثبقس ؾذؽ لبت ضا اػطا وطز شبیغ ضا زض لطاض ی زس سب یه نفح وب
فطاذای قز زض بؼب حشای ی كب زاز ی قز. زض content$یطز. زض لبت ضز ؾط ط ػب وس
ثطای ای نفح dynamic contents یب scriptsضا فطاذای ی وس سب اط processOutputاشب ای شس
ت ضز اؾشفبز كرم قس آب یع ث نفح اضبف قس. ث عض دیف فطو لب
protected/views/layouts/main.php ی ثبقس و ی سا آ ضا ثب سغییط مساض شغیطlayout زض ولاؼ
شیؼ اػطا ضا ثط ی طزاس. resultوشطط سغییط زاز. دبضاشط
زض ای وس ثبقس. ی ;this->render('go',array('id'=>'3'))$ث قى ح اؾب دبضاشطب اظ وشطط ث ی
ا دبضاشط اضؾبی ضecho $id;اضؾب ی قز زض ی ی سا ث قى goثطای ی 3ثب مساض idدبضاشط
ىش ای و ثبیس زلز وطز ای اؾز و دبضاشط ب فمظ ث ؾی آضای ثبیؿشی و زضیبفز اؾشفبز .
اضؾب قس.
ائبؿ وشط ثط ضی نفح :
$this->render('demo',array(loc => $id));
ثطای آ. ای وبض ثبفض ؾبذز نفح بیف نفح id$ثب مساض loc اضؾب دبضاشط demoاػطای یی
ث طا لبت نفح ذاس قس.
$this->renderParitial('demo',array(loc => $id));
طای آ. ای وبض ثبفض ؾبذز نفح بیف نفح ث id$ثب مساض loc اضؾب دبضاشط demoاػطای یی
لبت نفح ذاس قس. ثس
$this->redirect(Yii::app()->homeUrl);
41
كرم ذاس قس.Urlای زؾشض ثبفض اشمب ث نفح ای ثب
$this->refresh();
ای زؾشض ثبفض اػطای ؼسز ی نفح ذاس قس.
protected function beforeRender($view)
ویس سب لج اظ اػطای overrideاػطا ی قز. قب ی سایس ای شس ضا renderای شس لج اظ اػطای شس
ب ییی اؾز و اػطا ی قز. view$یه ی حبؾجبر یب دطزاظقبی ذبنی اؼب قز. دبضاشط
protected function afterRender($view, &$output)
اػطا ی قز. . processOutputاػطا ی قز. ای شس حشب لج اظ شس renderاظ اػطای شس ای شس ثقس
ویس سب ثقس اظ اػطای یه ی حبؾجبر یب دطزاظقبی ذبنی اؼب overrideقب ی سایس ای شس ضا
ی اؾز. شیؼ اػطای output$ب ییی اؾز و اػطا ی قز. دبضاشط view$قز.دبضاشط
public function renderText($text,$return=false)
ضا كب ی زس. ای قش زض لبت ػبضی دطغ[ لطاض ی یطز كب زاز ی textای شس یه قش
شیؼ اػطا resultش ضز ؾط اؾز. دبضاشط textقز یقی لبت ؾبیز زض آ حبػ ی قز. دبضاشط
ط ی طزاس.ضا ث
public function
renderPartial($view,$data=null,$return=false,$processOutput=false)
لبجی ضا renderPartialزض ای اؾز و شس renderای شس یه ی ضا اػطا ی وس. سفبر ای شس ثب شس
وس. چی اظ ای شس ثطای بیف لبت ضا یع افب ی renderثطای نفح افب ی وس ی شس
ب ییی اؾز و ثبیس اػطا قز. دبضاشط view$یع اؾشفبز ی قز. دبضاشط AJAXدبؾد ثب اؾشفبز اظ
$data مبزیی و ثطای اػطا ث نضر دبضاشط اضؾب قس اس ضا كرم ی وس. دبضاشط$return كرم
كرم ی وس processOutput $وبضثط كب زاز قز یب ذیط. دبضاشط ی وس و شبیغ حبن ثبیس ثطای
حبػ قز یب ذیط. processOutputو زض اػطا ثبیس شبیغ شس
public function createUrl($route,$params=array(),$ampersand='&')
آزضؼ ضز route$وس. دبضاشط ضا ثطای اوك ػز زض ای وشطط سقطیف ی relative URLشس یه ای
ControllerIDثبقس. اط ControllerID/ActionIDؾط ضا كرم ی وس. ای آزضؼ ثبیس زاضای ؾبذشبض
كرم جبقس وشطط ػبضی ث فا وشطط لطاض ی یطز. اط ای آزضؼ ذبی ثبقس آزضؼ اوك ػبضی
40
/ی ای آزضؼ زض ؾط طفش قز ثبیس آزضؼ ثب یه فلاز زض ؾط طفش ی قز. اط رای بغی ثطا
لطاض اؾز زضیبفز قز ضا كرم ی وس و GTTدبضاشطبیی و سؾظ params$قطؿ قز. دبضاشط
nameثبقس. اط URL-encodedثبیس ط ز name valueی ثبقس و name=>valueزاضای ؾبذشبض
زض نفح كرم ی قز. دبضاشط anchorطثع ث فا یه valueسقطیف قس ثبقس #وبضاوشط
ampersand$ دبضاشطبیname-value ضا زضURL .اظ یىسیط سفىیه ی وس
public function
createAbsoluteUrl($route,$params=array(),$schema='',$ampersand='&')
زض وشطط كرم ی وس. دبضاشطبی كشطن آ ضا ثطای اوك سقطیف قس absolute URLشس یه ای
غیط اؾز httpsیب httpكرم وس زضذاؾز بس $schemaبس شس لجی ی ثبقس. دبضاشط
و اط ذبی ثبقس مساض ػز زض زضذاؾز ػبضی زضؾط طفش ی قز.
public function getPageTitle)(
ا ثط ط طزاس و ث عض دیف فطو قب ب وشطط ب اوك اػطا قس اؾز.ای شس فا نفح ض
public function setPageTitle($value)
ای شس فا نفح ضا سقیی ی وس.
public function redirect($url,$terminate=true,$statusCode=302(
controller/actionی قس ثطز. و ؿیط آ ث قى سقی URLای شس ثبفض ی قز و طض ط ث آزضؼ
آزضؼ ضز ؾط ضا كرم ی وس. اط آزضؼ سطویجی ثبقس زض لبت یه اضای سقطیف url$اؾز. دبضاشط
ضا كرم ی وس ثمی فبنط اضای دبضاشطبیی ضا و ث نضر URLی قز و فهط ا آ آزضؼ
name-value زضGET ؾشفبز لطاض زاضس كرم ی وس. دبضاشط ضز ا$terminate كرم ی وس و
كرم وس statusCode$ضز ؾط ثطب دبیب دصیطز یب ازا دیسا وس. دبضاشط URLدؽ اظ اػطای
لطاض طفش اؾز. ثطای سضیحبر ثیكشط ی سا ث 302اؾز و ث عض دیف فطو ثطاثط HTTPضقیز
www.w3.org/Protocols/rfc2616/rfc2616-sec10.html .طاػق وطز
public function refresh($terminate=true,$anchor='')
ی اؾز قجی دبضاشط شس لج terminate$قس نفح ػبضی ی قز. دبضاشط refreshای شس ثبفض
دطـ بیس. مساض دیف anchorكرم ی وس و نفح دؽ اظ ثبضعاضی ؼسز ث وسا anchor$دبضاشط
قطؿ قز. #ضا زاضیس حشب ثبیس ب آ ثب فلاز anchorفطو آ ذبی اؾز. ىش : اط لهس اؾشفبز اظ
42
public function recordCachingAction($context,$method,$params(
فقب اؾز طجز ی وس. لشی و حشا output cacheضا لشی و یه method callیه فطاذای ث شس یب
زض ذطػی كب زاز قز شس شذیط قس فطاذای ی قز.
public function getCachingStack($createIfNull=true)
ضا زض نضسی و لجلا ایؼبز كس ثبقس stackف وطز یه ثطای و trueثطاثط createIfNullاط مساض دبضاشط
ایؼبز ی وس.
public function isCachingStackEmpty()
ذبی اؾز یب ذیط. caching stackكرم ی وس و آیب
protected function beforeAction($action(
ی قز اجش ثقس اظ اػطای سبی ای شس زلیمب لج اظ ایى یه اوك فطاذای اػطا قز اػطا
ویس. overrideفیشطبی اثؿش. قب ی سایس ای شس ضا ثطای اؼب وبضبی لاظ لج اظ اػطای اوك
ث اوك ضز ؾط اقبض زاضز. action$دبضاشط
protected function afterAction($action)
ز. ای شس زضؾز ثقس اظ اػطای اوك اػطا ی ق
public function filterPostOnly($filterChain(
postOnlyشس فیشط ثطای فیشط
public function filterAjaxOnly($filterChain)
ajaxOnlyشس فیشط ثطای فیشط
public function filterAccessControl($filterChain)
accessControlشس فیشط ثطای فیشط
public function paginate($itemCount,$pageSize=null,$pageVar=null(
ضا سیس ی وس. اظ عطیك ای شس ی سا اساظ یه نفح ضا paginationای شس اعلافبر طثط ث
ػسیس ضا paginationیه قی new Cpaginationكرم وطز. قب ی سایس ؿشمیب اظ عطیك اؾشفبز اظ
اساظ pageSize$سقساز فبنط زض ط نفح ضا كرم ی وس. دبضاشط itemCount$شط سیس بییس. دبضا
49
نفح ضا كرم ی وس و ثطای سقیی مبزیط آ ؾبیط دبضاشطب ی سایس سضیحبر طثط ث
Cpagination .ضا لاحؾ بییس
public function getPageState($name,$defaultValue=null)
شس ؾبیط شبی طسجظ حبز نفح ضا كرم ی وس. یه حبز نفح یه مساض اؾز و اظ ای
زض ی نفح اضؾب ی قز. POSTعطیك زضذاؾز ؿ
public function clearPageStates()
ای شس وی حبلار نفح ضا و حبػ قس اس حصف ی وس.
loadModelمتذ تعزیف ضذ
س ب ث ز قى اىب دصیط اؾز:زؾشطؾی ث
یبظ ث ؾبذز ضوضزی ػسیس زاضی ظلا ثطای فیبر ایؼبز یب حصف و ث قى ظیط فه ی -1
وی :
$model=new MyModel();
و زض ایهضر ثبیس اظ شس وىی updateی ذای ثب ضوضز ػبضی وبض وی ظلا ثطای فیبر -2
loadModel ظب :اؾشفبز بیی .
$model=$this->loadModel($id);
ای شس زض وشطط ث قى ظیط سقطیف ی قز :
public function loadModel($id)
{
$model=Website::model()->findByPk((int)$id);
if($model===null)
throw new CHttpException(404,'The requested
page does not exist.');
return $model;
}
44
مذیزیت درخاستای کاربز
سیطیز ی قس : componentزضذاؾشبی وبضثط سؾظ ز
CUrlManager component
CHttpRequest component
اؾشفبز اظ دبضاشطبی ضزی زض اوك :
Public function actionExample()
{
If (isset($_GET[„a‟]) $a = $_GET[„a‟];
Else die (“invalid parameter a”);
}
Public function actionExample($a) // function Override
{
Echo $a;
}
Action .ی ساس ث فا دبضاشط یه آضای ضا لج وس
Public function actionExample(array $a)
(URL parameter -> Controller) اشطبی ضزی وبضثط زض وشطط :بضح اؾشفبز اظ د
public function actionGo()
{
if (isset($_GET['id']))
{
$id = $_GET['id'];
}
else
{
die ("Invalid id parameter");
}
اط زض ذاؾشی ث قى ظیط زاز قز :
http://hostname.com/index.php?r=site/Go/id/2
بضاشط فطاذای قز دیغب ذغبیی ؽبط ثس د Goلطاض ی یطز اط اوك 2ثطاثط id$آب مساض شغیط
ی قز.
45
کىتزلزا : وکاتی در مرد
ضز یبظ اؾز ظ وسبی قب end userوشطط قب وسبیی اؾز و زض آب اعلافبر -1
$_GET $_POST .ای ؿ وسب فمظ زض وشطط لبث سقطیف ی ثبقس
اؾشفبز بیس.یه وشطط ی ساس یه س ػسیس ضا ثؿبظز -2
ثبقس. SQLوشطط ب جبیس قب وسبی -3
ثبقس. HTMLوشططب جبیس قب وسبی -4
اؾشفبز وطز. PHPزض وشططب ثبیس فمظ اظ وسبی -5
ولاؼ وشطط ثبیس سب حس اىب و حؼ ثبقس قب وسبی وسب ی طط ثبقس. وشطط ب -6
قلا قب وسبی ثؿیبض وی ؿشس.
فیبر زضیبفز زاز بی وبضثط زضیبفز سمبضبب ؾذؽ دطزاظـ بیشب اضؾب اعلافبر اضؾب -7
آب ث ثرف بی رشف ؽیف وشطط اؾز.
ا مذل
: ی مذلومدار ارث بزی ا
46
یه س قطف یه ضوضز اظ ثبه اعلافبسی یب اعلافبر یه فط اضز قس سؾظ وبضثط اؾز.وی
کلاط پبی ثشای CModel ؾبذش ی قس. یب ظیط ولاؾبی آ CModelاظضی ولاؼ اس ی سؾبولا
ثبه اعلافبسی قطفی قس ط وسا اظ فیسبی هی ثبؽذ. data model objectsاعتفبد اص یژگی بی
label یه ثطچؿت valueی ساس قب یه مساض attributeی یس. ط attributeزض س ضا یه
یه س ی ساس ثی چس لؿز اظ ثطب ث عض كشطن اؾشفبز قز. ثبقس.
protected \ modelsح لطاض یطی فبی س ب :
application.modlesآزضؼ ؿشقبض ثطای زؾشطؾی ث س ب :
اواع مذل
و ط ز اظ ولاؼ ActiveRecordطی ب زی FormModelس ب ث ز قى ػز ی ثبقس. یىی
اضص ثطی ی وس. CModelاس
1 )FormModel یه س زاز و اعلافبر ضزی وبضثط زض لبت فط بی :HTML .ضا زضیبفز ی وس
ای اعلافبر سب زض حبفؾ ؾیؿش لطاض ی یطس زض زاذ ثبه اعلافبسی. ثطای زؾشطؾی ث فیسبی
اضص ثطی CFormModelبیس ثطای ط وسا یه شغییط ثب ب ب سقطیف بیی. ای ؿ س اظ ولاؼ فط ث
اؾز و سب اعلافبر ضا اظ ضزی سؾظ فط زضیبفز ی وس loginی وس. ثبضظ ای ؿ س فط
ی وس. ظب : آ ضا سؼعی سحی ی بیس ی چیعی ضا زض ثبه اعلافبسی شذیط
class LoginForm extends CFormModel
CComponent
CModel
CFormModel
User Model
CActiveRecord
User Model
47
{
public $username;
public $password;
public $rememberMe;
زؾشطؾی ث ضزی بی فط آ اظ عطیك ی شغیطبیی اؾز و زض اثشسا سقطیف وطز ای.اط قب ی
اؾشفبز بییس. FormModelثبیس اظ Loginذایس ثب زاز بی اضز قس وبضثط وبض ویس ظ
2 )ActiveRecord یه س زاز و اعلافبر ضا ؿشمیب زاذ ثبه اعلافبسی شذیطی ی بیس قطف :
یبظی ث سقطیف شغیط ػساب ی ثبقس. ظ فط بی ػس ثبه اعلافبسی ی ثبقس فیس ب ضاثغ
register ط ؿشمی اعلافبر زاذ ثبه اعلافبسی ضا اؼب ی زس. )و فیبر زضیبفز شذیActive
Record (AR .ای یه عطاحی قی طا ثطای زؾشطؾی ث اػعای ثبه اعلافبسی زض لبت قی اؾزactive
record اضای وس یه س ثط اؾبؼObject-Relational Mapping (ORM) .وی ولاؾبی ای ی ثبقس
ولاؼ دبی ثطای وی ولاؾبیی CActiveRecordولاؼ اضص ثطی ی وس. CActiveRecordس اظ ولاؼ
زاضای ؾبذشبض انی ظیط اؾز ARیه فط اؾز و ثبه بی اعلافبسی ضاثغ ای ضا دیبز ؾبظی ی وس.
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return '{{table1}}';
}
اؾز و یه شس اؾشبسیه اؾز اظ عطیك آ modelای شس زاضای ز شس انی اؾز و یىی اظ آب شس
اؾز و ب ػس ضا ثط ی طزاس. tableNameی سا ث اػعای س زؾشطؾی دیسا وطز زیطی شس
اط قب ی ذایس و زاز ب ضا زض ثبه اعلافبسی ضطضی اؾز. ActiveRecordز ای ز شس زض ػ
.اؾشفبز ویس Active Recordثبیس اظ Registerationشذیط ویس ظ
ب ضا Formodelایؼبز ی وس. ActiveRecordفمظ فط اظ ؿ Form generatorزض لؿز giiىش : اثعاض
س ث عض زؾشی ایؼبز بیی.ثبی
48
: کلی کلاسای مذلي قابل استفاد در CModelمتذ ای تعزیف ضذ در
abstract public function attributeNames)(;
بی ضز اؾشفبز زض س ضا ثط ی طزاس. attributeای شس یؿشی اظ ببی
public function rules)(
ذطػی شس فق آضای ای اظ شبیغ ث بی فط اؼب ی زس. attributeبض ؾؼی ضا ثطای ای شس لای افشج
ز لای افشجبض ؾؼی ضا overrideی سا ای شس ضا زؾز آس سؾظ شس افشجبض ؾؼی اؾز.
كرم وطز.
وبضثط اظ ضزی زضیبفز ی ىش : افشجبضؾؼی ب ضا فمظ ثبیس ثطای فیسبیی قز و مساض آب سؾظ
ػز ثبقس و مساض آ سؾظ ؾیؿش دط ی قز یبظی ث CurrentTimeقز ظلا اط فیسی ظ
ط لب افشجبض ؾؼی زض لبت یه آضای ثب ؾبذشبض ظیط كرم ی قز :افشجبض ؾؼی آ یؿز.
<pre>
array('attribute list', 'validator name', 'on'=>'scenario
name', ...validation parameters...)
</pre>
attribute list كرم وس بattribute .ب اؾز و ثبیس سؾظ وبب اظ یىسیط ػسا قسvalidator name
ظب :كرم وس ؿ فیبر افشجبض ؾؼی اؾز و ثبیس اؼب قز.
array('username, password', 'required')
ی ثبقس. Validatorیه requiredی یس attributeضا username passwordزض ظب فق
Validatorاواع
فشجبض ؾؼی ثبقس و لشی آ ولاؼ فطاذای قس یه قی اظ ضی آ ای ساس ب یه ولاؼ -1
ولاؼ ؾبذش قس فیبر افشجبض ؾؼی سؾظ آ قی اؼب ی قز.
یقی ب ؿشقبض ثطای آ ولاؼ افشجبض aliasث ػبی ب ولاؼ افشجبض ؾؼی ب یه ی ساس -2
requiredؾؼی ثبقس ظ
alias : ای معزيف بزای اعتبار سىجی
49
boolean: alias of CBooleanValidator, ensuring the attribute has
a value that is either CBooleanValidator::trueValue or
CBooleanValidator::falseValue.
captcha: alias of CCaptchaValidator, ensuring the attribute is
equal to the verification code displayed in a CAPTCHA.
compare: alias of CCompareValidator, ensuring the attribute is
equal to another attribute or constant.
email: alias of CEmailValidator, ensuring the attribute is a
valid email address.
default: alias of CDefaultValueValidator, assigning a default
value to the specified attributes.
exist: alias of CExistValidator, ensuring the attribute value
can be found in the specified table column.
file: alias of CFileValidator, ensuring the attribute contains
the name of an uploaded file.
filter: alias of CFilterValidator, transforming the attribute
with a filter.
in: alias of CRangeValidator, ensuring the data is among a pre-
specified list of values.
length: alias of CStringValidator, ensuring the length of the
data is within certain range.
match: alias of CRegularExpressionValidator, ensuring the data
matches a regular expression.
numerical: alias of CNumberValidator, ensuring the data is a
valid number.
required: alias of CRequiredValidator, ensuring the attribute is
not empty.
type: alias of CTypeValidator, ensuring the attribute is of
specific data type.
unique: alias of CUniqueValidator, ensuring the data is unique
in a database table column.
url: alias of CUrlValidator, ensuring the data is a valid URL.
authenticateشس ی ساس یه شس ثبقس ظ -3
یه شس افشجبض ؾؼی ث قى ظیط سقطیف ی قز :
<pre>
// $params refers to validation parameters given in the rule
function validatorName($attribute,$params)
</pre>
51
: ا چىذ مثال اس اعتبار سىجی
ضطضی اؾز attributeاضز وطز مساض زض فیس
array('username', 'required'),
وبضاوشط زاقش ثبقس 12سب 3ثبیس ثی usernameفیس
array('username', 'length', 'min'=>3, 'max'=>12),
مساضقب یىؿب ثبقس password2ثبیس ثب password1 فیس registerزض ؾبضی
array('password1','compare','compareAttribute'=>'password2', 'on'=>'register'),
ضا افشجبض ؾؼی وس passwordاػطا قز فیس attributeثبیس شس loginزض ؾبضی
array('password', 'authenticate', 'on'=>'login'),
ثبقس 1یب 0ضزی ثبیس
array('check', 'boolean'),
ضزی ثبیس ایی ثبقس
array('email', 'email')
ثبقس URLضزی ثبیس آزضؼ
array('url', 'url'),
ضزی ثبیس عجك یه ای سقطیف قس ثبقس
Array('tags','match','pattern'=>'/^[\w\s,]+$',
password1 password2مبیؿ ز ضزی ظ ثطضؾی یىؿب ثز
اجش ثبقس. اؾز و ثبیس یىؿب password2 زیطی فیس 1passwordزض ای ظب ز فیس یىی ث ب
زض ؾط طفش safeؿ آ Rulesقش قز چی ثبیس زض ;public $password2ثبیس زض س حشب
قز.
array('password1', 'compare', compareAttribute'=>'password2'),
50
Capchaوح تعزیف ي استفاد اس
Capcha س ی وس اظ وبضثط ی ذاس ای وس ضا ذاس یه حبز ایشی اؾز و یه وس سهبزفی سی
زض فیس طثع زض فط اضز وس.
زض وشطط وس ظیط ضا اضز ی وی: actionثطای ای وبض اثشسا زض شس
public function actions()
{
return array(
// captcha action renders the CAPTCHA image
displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
);
}
ی سا ض دؽ ظی ضا كرم وطز چی یػی بی زیطی یع زاضز و backColorزض لؿز
ی سا اظ ضی زؾشض اق سقیی وطز.
ؾؼی فیسی و ی ذای اؼب قز ث قى ظیط اؾشفبز ی وی: حب زض س زض لؿز افجبض
array('verifyCode', 'captcha',
'allowEmpty'=>!CCaptcha::checkRequirements()),
ث قى ظیط ف ی وی : capcha زض س ثطای بیف
<?php if(CCaptcha::checkRequirements()): ?>
<div class="row">
<?php echo $form->labelEx($model,'verifyCode'); ?>
<div>
<?php $this->widget('CCaptcha'); ?>
<?php echo $form->textField($model,'verifyCode'); ?>
</div>
<div class="hint">Please enter the letters as they are
shown in the image above.
<br/>Letters are not case-sensitive.</div>
</div>
<?php endif; ?>
52
سىاری ا یا سیاست ای اعتبار سىجی :
زض ػبی زیط عی ث اظ آؼبیی و ثقضی اظ افشجبض ؾؼی ب زض ثقضی اظ لؿز ب ث وبض ی ضس
ی سا كرم وطز و وسا افشجبض ؾؼی زض وؼب ث وبض ضز. ث فا ظب :اػطای آب ی ثبقس
public function rules()
{
return array(
array('username, password', 'required'),
array('password_repeat', 'required',
'on'=>'register'),
array('password', 'compare', 'on'=>'register'),
);
}
اػطا ی قس. register وس ا افشجبض ؾؼی ثبلا ػب اػطا ی قز ی ز وس ثقسی فمظ زض ظب
ای ث قی سؼیـ ؾیبؾشب زض یه لؿز اؾز. ػی وس یؿی بی سىطاضی ضا ی یطز.
ی سا كرم ز و فیبر افشجبض ؾؼی ثطای وسا ؾبضی اػطا قز اط كرم ىی افشجبض
.اػطا ذاس قس ؾؼی ثطای ؾبضی ب
Safe Attributes؟ چیست
فش ی قز ظ unsafeس ی ثبیس اظ زیس وبثط رفی ثبقسو ػز زاضبیی Attributeث
Attributes طثط ث ویس انی ظیطا اط ویس انی زض فط كب زاز قز )و لاظ یؿز( ای ثبفض ی
یه Attributesunsafrقز و یه ىط ثشاس ث ؾبیط فیسب زؾشطؾی دیسا وس. ثبثط ای یه
Attributes .ؾبیط اؾز و اظ زیس وبضثط رفی ی قزAttribute ب اظ ؿsafe ثز ثطای وبضثط كب زاز
ی قس.
اؾشظب : safeط فیسی و زض افشجبض ؾؼی زض یه ؾبضی لطاض ثیطز زض ب ؾبضی
array('username, password', 'required', 'on'=>'login,
register'),
array('email', 'required', 'on'=>'register'),
سقطیف قس اس صا زض فط login registerزض ؾبضی username passwordبی attributesزض ظب ثبلا
registerبضی سب زض ؾ emailثب ب attributesبیف زاز ذاس قس. ی login registerبی ثب ؾبضی
ث loginاؾز كب زاز ی قز زض فط ثب ؾبضی safeسقطیف قس زض فط بی ثب ی ؾبضی
اؾز كب زاز ی قز. unsafe نضر
59
loginثب ؾبضی زض وشطط س اظ یه ؾبذز
// in login scenario
$model=new User('login');
if(isset($_POST['User']))
$model->attributes=$_POST['User'];
registerثب ؾبضی زض وشطط س اظ یهؾبذز
// in register scenario
$model=new User('register');
if(isset($_POST['User']))
$model->attributes=$_POST['User'];
ب یبس validation rulesاؾز حشی اط زض safe حبز attributeیه بی لاظ اؾز و ب افلا وی و
ثبقس ثطای ای وبض ث قى ظیط ف ی وی :
array('content', 'safe')
ثز ث قى ظیط ف ی ویس : unsafe ث ی سطسیت ثطای
array('permission', 'unsafe')
بیی اؾشفبز ی قس و مبزیطـ ضا اظ وبضثط ی یطس attributeی ىش : لای افشجبض ؾؼی سب ثطا
یؿز. rulesبیی و یبظ ث ضز زاز ب اظ وبضثط ساضس یبظی ث سقطیف attributeثطای
پیامای خطای صادر ضذ :
یب ()CModel::getErrorsلشی فیبر افشجبض ؾؼی اػطا قس دیببی ذغبی نبزض قس سؾظ
CModel::getError(). .لبث زؾشطؾی ؿشس
CModel::getError(). .فمظ ای دیب ذغبی نبزض قس ضا ثط ی طزاس
CModel::getErrors(). .دیببی ذغبی نبزض قس ضا ثط ی طزاس
: تعییه پیام خطا
اؼب messageكرم ز و ای وبض ثؾی مساضزی ruleیغب ذغبی بؾت ضا ثطای ط ی سا د
ی قز : ظب
array('name', 'required', 'message'=>'{attribute} is required')
ضا كب ی زس.ػبضی فیس ثطچؿت {attribute}زض ظب ثبلا
array('family', 'required', 'message'=>'Family is required')
54
public function behaviors)(
زض ای شس یؿشی اظ ضفشبضب و ای س ثبیس اظ ذز كب زس كرم ی قز. ذطػی ای شس آضای
ی ساس یه ضقش سقطیف وس behavior configurationsی ثبقس. ط behavior configurationsای اظ
ضای ای ثب ؾبذشبض ظیط یبقس :ضفشبض ثبقس یب آ
<pre>
'behaviorName'=>array(
'class'=>'path.to.BehaviorClass',
'property1'=>'value1',
'property2'=>'value2',
)
</pre>
بیس. ضفشبضب اضص ثطی CBehaviorاؾشفبز وس یب اظ ولاؼ IBehaviorثبیس اظ اؾظ behaviorولاؼ
ب ؾبذز یه اظ س ث آ احبق ی قس.ثطای غبق وب ضفشبضب ی سا ضابی
طاػق ز. CComponentضا غبق وطز یب ث ضابی PHPقی طایی زض
public function attributeLabels)(
زاضای یه ب یه ثطچؿت یه مساض ی attributeط ب ضا ثط ی طزاس. attributeای شس ثطچؿت
اظ آؼبیی و سبی لؿشبیی و وبضثط زض آب ضا ثط ی طزاس. attributeثبقس و ای شس سب ثطچؿت آ
زض فط اعلافبر ضا اضز ی وس زاضای یه فا اؾز صا ی سا فا ط فیس ضزی ضا زض س
ط چس ی سا ای وبض ضا زض ذز فط یب زض ی ضز ؾط لطاض زاز ی ای لبثیز ثطای كرم ز.
ػز زض س كرم قس. ظب : ()attributeLabelsس حبػ قس اؾز. سبی فای ثبیس زض شس
public function attributeLabels()
{
return array(
'username' => 'Username',
'password' => 'Password',
);
}
لطاض Passwordثطاثط password ثط چؿت ضزی Usernameثطاثط usernameثطچؿت یب فا ضزی
ثب ثطچؿت آ یىی زض ؾط attributeطفش اؾز. ث عض دیف فطو بغض و كبس ی قز ب ط
حطف ثعضي ایؿی اؾز.طفش ی قز ی زض ثطچؿت حطف ا
55
protected function afterConstruct)(
ای شس دؽ اظ ؾبذز یه اظ ضی س ثلافبن اػطا ی قز.
protected function beforeValidate)(
ای شس زضؾز لجلاػطای شس افشجبض ؾؼی اػطا ی قز.
protected function afterValidate)(
اػطای شس افشجبض ؾؼی ثلافبن اػطا ی قزای شس ثقس اظ
public function getAttributeLabel($attribute(
ضا طفش ثطچؿت آ ضا ثط ی طزاس. attributeای شس ب یه
public function hasErrors($attribute=null(
بیی ضا ث زجب زاضز یب ذیط.ذغ attributeای شس كرم ی وس و شیؼ افشجبض ؾؼی ثطای ای
public function getErrors($attribute=null(
ث نضر یىؼب كب ی زس.attributeای شس سبی دیببی ذغبی نبزض قس ضا ثطای یه
public function getError($attribute(
.كب ی زس attributeای شس ای دیب ذغبی نبزض قس ضا ثطای یه
public function addError($attribute,$error(
اضبف ی وس. attributeای شس دیب ذغبی ػسیسی ضا ث یه
public function addErrors($errors(
ب ایؼبز ی attributeثطای attributeName->ErrorMessageای شس یؿشی اظ دیببی ذغب ضا ث قى
وس.
public function clearErrors($attribute=null(
ب ضا دبن ی وس. Attributeای شس سبی دیببی ذغبی نبزض قس ثطای یه یب
56
public function getAttributes($names=null(
كرم ضا زض لبت یه آضای attributeب یب یه Attributeبی ػز زض سبی valueای شس مبزیط
سقطیف قز ثطای ثططزاس ی قس. names=null$. اط ثط ی طزاس
public function setAttributes($values,$safeOnly=true(
ییس massive assignmetب ضا ث عض یىؼب سقیی ی وس و ث ای ضـ attributeمبزیط سبی
ثبفض افعایف ایز ی طزز.
safeبیی وذی ی قز لطاض ی یطز و اظ ؿ attributeسب مبزیط massive assignmentىش : زض
ب وذی ی قس ای ثبفض افعایف یعا ایز ی قز. safeؿشس غیط
ب اؼب قز یب سب attributeكرم ی وس و فیبر اشؿبة آیب ثبیس ثطای safeOnly$دبضاشط
ب اؼب قز. safe attributeثطای
public function unsetAttributes($names=null(
ب ضا ذبی ی وس. Attributeای شس مبزیط
public function getScenario)(
ای شس ب ؾبضییی ضا و ای س زض آ وبض ی وس ضا كرم ی وس. ؾبضی كرم ی وس و
massiveب ی ساس ث نضر یىؼب یب attributeی اؼب قز وسا فیبر افشجبض ؾؼی ث چ قى
مساض زی قس. ث ایهضر و ط ولاؼ ی ساس زض یه ؾبضی سقطیف قز ظ :
class Users extends CActiveRecord('register')
ب و زض ای attributeوسا اظ ط ruleسقطیف قس اؾز. حب زض شس registerای س ولاؼ زض ؾبضی
مساض زی ی قس. ظ افشجبض ؾؼی ظیط : massiveؾبضی سقطیف قس ث نضر
array('password', 'compare', 'on'=>'register'),
public function setScenario($value(
ؾبضی طثط ث ای س ضا سقطیف ی وس.
public function getSafeAttributeNames)(
57
مساض زی ی قس ضا كرم massiveؿشس ث نضر safeب و زض ای س attributeیؿشی اظ
ی وس.
: CActiveRecordکلاسای مذل وع ي قابل استفاد در CActiveRecordمتذ ای تعزیف ضذ در
صا س چس شس زاذی حسز ی قز.سب ث شس ؾبظ CFormModelشس بی سقطیف قس زض ىش :
ی دطزاظی. CactiveRecordزض ای لؿز ث سضیح شسبی دطوبضثطز زض
databaseقطف اضسجبط ثبه اعلافبسی یب active recordثطای سبی ولاؾبی CDbConnectionشغیط
connection ی ثبقس و زاذ شغیطdb .لطاض ی یطز
public static $db;
ضػؿ ویس. getDbConnectionثطای سضیحبر ثیكشط زض ای ضز ث
public function init)(
ای شس ظبی اػطا ی قز و یه اظ ضی س ؾبذش قز.
public function
getRelated($name,$refresh=false,$params=array())
ثبقس BELONGS_TO یب HAS_ONEس. اط ضاثغ ب اظ ؿ ای شس ضوضزبی زض ضاثغ ضا ثط ی طزا
ضا ثط ی طزاس. اط ضاثغ اظ ؿ nullای شس یه قی ضا ثط ی طزاس اط ای ضاثغ ػز جبقس مساض
HAS_MANY یب MANY_MANY .ثبقس ای شس آضای ای اظ اقیب ضا ثط ی طزاس
public function hasRelated($name(
كرم قس اؾز name$ای شس كرم ی وس و آیب اقیب زض ضاثغ و ب آب سؾظ دبضاشط
ثبضعاضی قس اس یب ذیط.
public function getDbCriteria($createIfNull=true(
اثغ اؾز.زض ض scopeبی سقطیف قس ثطای ای س ضا ثط ی طزاس. ای شس ثب شس criteriaای شس وی
public function setDbCriteria($criteria(
ب ضا ثطای ای سا كرم ی وس. criteriaای شس
public function defaultScope)(
58
بی ای س حبػ قز. queryضا كرم ی وس و ثبیس ثطای سبی scopeای شس ب دیف فطو
ف ی وس. ثطای یه س ی سا یه حظ زؾشطؾی اظ SELECTبی queryاجش ای شس سب ثطای
ثبه اعلافبسی ضا كرم ز و سؾظ آ زؾشطؾی وبضثط ث یه فضبی كرم اظ ثبه اعلافبسی
اؼب ی قز. scopeب زض شس criteriaحسز قز ای وبض سؾظ سقیی
public function resetScope)(
ضا غیط فقب ی وس. defaultScopeقس چی بی سقطیف criteriaب scopeای شس سبی
public static function model($className=__CLASS__)
ضا زاضس ARاظ ای ولاؼ ضا ثط ی طزاس. وی ولاؾبیی و لهس وبض وطز ثب staticای شس یه
بیس : overrideثبیس ای ولاؼ ضا ث قى ظیط
<pre>
public static function model($className=__CLASS__)
{
return parent::model($className);
}
</pre>
public function getMetaData)(
بی ای ولاؼ س ضا ثط ی طزاس. meta-dataای شس
public function refreshMetaData()
table schemaی وس. ای شس ظبی فیس اؾز و refreshبی ای ولاؼ س ضا meta-data ای شس
سغییط وطز ثبقس قب ثرایس آذطی سغییطار ضا افب ویس.
public function tableName)(
شس ب ولاؼ ضا ای شس ب ػس ضز اؾشفبز زض ثبه اعلافبسی ضا ثط ی طزاس. ث عض دیف فطو ای
ث فا ب ػس ثط ی طزاس.
public function primaryKey()
59
ای شس فیس انی اظ ػس ضز اؾشفبز زض ثبه اعلافبسی ضا ثط ی طزاس. اط ویس انی سب ضی یه
ضوضز افب قس فیس سقطیف قس ثبقس ای شس ب آ فیس ضا ثط ی طزاس اط ویس انی ضی چس
ثبقس ای شس آضای ای ضا ثط یطزاسو قب ب سبی آ فیسب اؾز.
public function relations()
اضز ی وس. ىش ای اؾز و زض modelث عض ذزوبض ضاثغ بی ػز ثی ػس ضا زض giiاثعاض
قس.یه ثبه اعلافبسی ی ساس اظ ػسی ؿ سض رشف اؾشفبز قس ثب Foreign Keyضاثغ بی ثبیس اظ
زض ػس ضز ؾط PhpMyAdminی یی. ثطای بیف آ زض Storage Engineاؾشفبز وس و ث آب
ی سا سض Storage Engineی سای اضز قی. حب زض لؿز Operationsاضز قس زض لؿز
ة وطز. س سض قطف :ضز ؾط ضا اشرب
MyISAM سضی ؾبز، ثب اىببر وشط، دیف فطو، لبثیز وبض ثب :Foreign Key ب ضا ساضز
InnoDB سضی دیكطفش سط ثب لبثیز بی ظیبز سط ، اىب سقطیف ویس بی ذبضػی ثطای ػسا وبض ثب :
Transactions .ؾبیط اىببر ثبه اعلافبسی
active record objectقز. زض و چبض ؿ ضاثغ ثی overrideب ای شس ثبیس related objectsطای افلا ث
ب ی ساس سقطیف قز و فجبضسس اظ :
1- BELONGS_TO: e.g. a member belongs to a team
2- HAS_ONE: e.g. a member has at most one profile
3- HAS_MANY: e.g. a team has many members
4- MANY_MANY: e.g. a member has many skills and a skill belongs to a member
یع غطح ی قز و ی سا اظ آ اؾشفبز STATفلا ثط چبض ؿ ضاثغ ثبلا یه ؿ ضاثغ زیط ثب ب
طؼ ػ بی سؼیقی( ضز ب )د aggregational queryب یب statistical queryوطز ثطای اػطای
اؾشفبز لطاض ی یطز.ای ؿ ضاثغ اعلافبر سؼیقی زض ضز اقیب زض ضاثغ ضا ثط ی طزاس. ظلا سقساز
دیبب ثطای ط غت دؿز قس یب قس ثبظزیس اظ یه حه.
ط وسا اظ ضاثغ بی سقطیف قس زض ای شس زض لبت ظیط سقطیف ی قس :
<pre>
'varName'=>array('relationType', 'className', 'foreign_key',
...additional options)
61
</pre>
كرم وس relationTypeطثع اقبض زاضز دبضاشط property یب variablث ب varNameدبضاشط
اقبض زاضز و ضاثغ زض active record class ث classNameؿ ضاثغ اؾز و ااؿ آ زض ثبلا آس دبضاشط
ث ویس ذبضػی اقبض زاضز و ضاثغ ز فیس ضا ثطلطاض ی وس. foreign_keyآ سقطیف ی قز دبضاشط
ىش : اط ویس ذبضػی سطویجی اظ چس فیس ثبقس ثبیس آ فیسب ی آضز قس ثب فلاز وبب اظ
join_table(‘fk1, fk2'(اضسجبط ز ػس ثبیس بس MANY_MANYثطای ضاثغ بی یىسیط ػسا قس.
سقطیف قس و ی سا ثطای سضیحبر name-valueسقطیف قز. دبضاشطبی اضبفی ثبیس بس ای
.طاػق ز relationsثیكشط ث ضابی شس
ظب :
<pre>
return array(
'author'=>array(self::BELONGS_TO, 'User', 'author_id'),
'comments'=>array(self::HAS_MANY, 'Comment', 'post_id',
'with'=>'author', 'order'=>'create_time DESC'),
'tags'=>array(self::MANY_MANY, 'Tag', 'post_tag(post_id,
tag_id)', 'order'=>'name'),
);
</pre>
public function scopes()
ی ثبقس و ی ساس ثب query criteriaیه scopeضز ؾط ضا ثط ی طزاس. یه scopeای شس افلا
scope زیط ث نضر ظؼیط اض زض آیس. ای شس سؾظ ولاؾبی فطظس و اظ ؿAR ؿشسovrride ی
ضا سقطیف ی وس : recently publishedثب ببی scopeقز. ث فا ظب وس ظیط ز
<pre>
return array(
'published'=>array(
'condition'=>'status=1',
),
'recently'=>array(
'order'=>'create_time DESC',
'limit'=>5,
),
);
</pre>
60
بی ظیط ضا زاقش ثبقی : queryسقطیف قز ب ی سای Postزض س scope اط ای
<pre>
$posts=Post::model()->published()->findAll();
$posts=Post::model()->published()->recently()->findAll();
$posts=Post::model()->published()->with('comments')-
>findAll();
</pre>
سقطیف قس اظ ؿ ضاثغ ای ی ثبقس. queryآذطی سػ ویئ و
public function attributeNames()
بی ای س ضا ثط ی طزاس. ای ی ساس سبی ب سبی فیسبی ػس attributeای شس ب سبی
ضاثط طزاس. ARاؾشفبز قس زض ای ولاؼ
public function getAttributeLabel($attribute)
ضز ؾط ضا ثط ی طزاس. attributeای شس ثطچؿت
public function getDbConnection()
dbضا ثط ی طزاس. ث عض دیف فطو ARضز اؾشفبز سؾظ ای Database Connectionای شس
component ث فاDatabase Connection ب لهس زاضیس ثب ضز اؾشفبز لطاض ی یطز. اط ق
connection .زیطی وبض ویس ی سایس اظ ای شس اؾشفبز ویس
class CBelongsToRelationextends CActiveRelation
ضا ثط ی طزاس. BELONGS_TOای ولاؼ دبضاشطبی طثط ث ضاثغ ؿ
class CHasOneRelationextends CActiveRelation
ضا ثط ی طزاس. HAS_ONEطثط ث ضاثغ ؿ ای ولاؼ دبضاشطبی
class CHasManyRelation extends CActiveRelation
ضا ثط ی طزاس. HAS_MANYای ولاؼ دبضاشطبی طثط ث ضاثغ ؿ
class CManyManyRelation extends CHasManyRelation
ا ثط ی طزاس.ض MANY_MANYای ولاؼ دبضاشطبی طثط ث ضاثغ ؿ
62
مجد در فایل class CActiveRecordMetaDataتعزیف ضذ در متذ ا ي متغیزای
CActiveRecord :
public $tableSchema // the table schema information
public $columns // array table columns
public $relations=array()// array list of relations
public $attributeDefaults=array()// array attribute default values
public function addRelation($name,$config(
relation typeیه آضای ثب ؾ فهط اؾز و فجبضسس اظ config$ای شس یه ضاثغ ضا ایؼبز ی وس.
active record class foreign key .
public function hasRelation($name(
ای شس ثطضؾی ی وس و آیب ضاثغ ای ثب ب كرم قس ػز زاضز یب ذیط.
public function removeRelation($name(
ای شس یه ضاثغ ضا و سؾظ ب آ كرم قس اؾز حصف ی وس.
public function getActiveRelation($name)
ضاثغ ای ثب ب كرم قس ضا ثط ی طزاس. (declaration)ای شس افلا
public function getTableSchema()
شقك ث آ اؾز ضا ثط ی طزاس. ARطثط ث ػسی و ای metadataای شس
public function getCommandBuilder)(
ضا ثط ی طزاس. ARطثظ ث ای command builderای شس
public function hasAttribute($name)
ثب ب شوط قس زاضز یب ذیط. attributeای شس ثطضؾی ی وس و آیب ای ػس
public function getAttribute($name)
ثب ب زاز قس ضا ثط ی طزاس. اط یچ ضوضزی دیسا كز مساض دیف فطو attributeای شس مساض
ثبقس سبو queryضا ثط ی طزاس. اط و ای ضوضز شیؼ یه attributeسقطیف قس ثطای ای
query ثبض عاضی مساض زی كس ثبقس مساضnull .ضا ثط ی طزاس
69
دسترسی Attribute$ به مقدار موجود در this->AttributeNameىش : قب چی ی سایس اظ عطیك
پیدا کنید.
public function setAttribute($name,$value)
كرم قس ضا سقیی ی وس. قب چی ی سایس ثب اؾشفبز اظ زؾشض ظیط attributeای شس مساض
ای وبض ضا اؼب زیس:
$this->AttributeName = newValue;
public function getAttributes($names=true)
ا ثط ی طزاس. اب مبزیط اقیب زض ضاثغ ضا ثط ی طزاس. اط مساض ب ض Attributeای شس مساض سبی
ب ثط طزاس ی قز و قب آبیی attributeثبقس و دیف فطو ؿز مبزیط trueدبضاشط آ
اط مساض ثططزاس ی قز nullو ظ اظ ثبه اعلافبسی ثبضعاضی كس اس یع ی قز مساض آب
بیی ثططزاس ی قس و اظ ثبه اعلافبسی مساضقب ثبضعاضی قس ثبقس. attributeثبقس سب falseآ
public function save($runValidation=true,$attributes=null)
اشط ای شس ضوضز ػبضی ضا شذیط ی وس. ای شس ضوضز ػسیسی ضا ث ػس اضبف ی وس اط دبض
isNewRecord آ ثطاثطtrue ثبقس. زض غیط ای نضر ای شس فیبرupdate .ضوضز ضا اؼب ی زس
اؼب ی یطز. اط افشجبضؾؼی ثب قىؿز Saveىش : اض فیبر افشجبض ؾؼی لج اظ فیبر
ثطای دیسا وطز ()getErrorsطا قز فیبر شذیط ؾبظی اؼب ی یطز. قب ی سایس اظ شس
ی falseآ ثطاثط isNewRecordذغببی افشجبضؾؼی اؾشفبز بییس.اط ضوضز ػسیس اضبف قز دبضاشط
-autoلطاض ی یطز اط ویسی اظ ػس زاضای ذبنیز updateآ ثطاثط scenarioقز دبضاشط
incremental .ثبقس یىی ث آ اضبف ی قز
public function getIsNewRecord()
ضا ثط ی طزاس. trueقز ای شس مساض Saveاط ضوضز ػسیسی لطاض ثبقس
public function onBeforeSave($event(
اػطا ی قز. ثقس اظ اػطای شس افشجبض ؾؼی. ای شس سؾظ شس saveای شس زلیمب لج اظ اػطای شس
beforeSave ی ی قز.فطاذا
public function onAfterSave($event)
64
فطاذای ی قز. afterSaveاػطا ی قز. ای شس سؾظ شس saveای شس زضؾز ثقس اظ اػطای شس
public function onBeforeDelete($event)
فطاذای ی قز. beforeDeleteاػطا ی قز.ای شس سؾظ شس deleteای شس زلیمب لج اظ اػطای شس
public function onAfterDelete($event)
فطاذای ی قز. afterDeleteاػطا ی قز.ای شس سؾظ شس deleteای شس زضؾز ثقس اظ اػطای شس
public function onBeforeFind($event)
ساز ذبنیز اػطا ی قز.زض ای ضی find callای شس زلیمب لج اظ اػطای یه فطب
CModelEvent::criteria حشیquery criteria ی ثبقس و ث نضر دبضاشط ث شسبیfind اضؾب ی
قز.
public function onAfterFind($event)
اػطا ی قز. find callای شس زضؾز ثقس اظ اػطای یه فطب
protected function beforeSave)(
اػطا ی قز. ثقس اظ اػطای شس افشجبض ؾؼی. saveاػطای شس ای شس زلیمب لج اظ
protected function afterSave)(
و ث نضر فمیز آیع اػطا قس اؾز اػطا ی قز. saveای شس ثقس اظ اػطای شس
protected function beforeDelete()
اػطا ی قز. deleteای شس زلیمب لج اظ اػطای شس
protected function afterDelete)(
اػطا ی قز. deleteای شس زضؾز ثقس اظ اػطای شس
protected function beforeFind()
اػطا ی قز. ااؿ شس ػؿشؼ فجبضسس اظ : find callای شس زلیمب لج اظ اػطای یه فطب
Find findAll findByPk findAllByPk findByAttributes findAllByAttributes
65
protected function afterFind()
ای شس دؽ اظ ؾبظی اظ ضی ط ضوضز سؾظ یه شس ػؿشؼ اػطا ی قز.
public function insert($attributes=null(
قز. قب ای شس یه ضوضز ػسیس ضا زض ػس شذیط ی وس. شس افشجبض ؾؼی ثطای ای شس اػطا ی
افشجبضؾؼی ضا فطاذای بییس. validateی سایس ثب اؾشفبز اظ شس
public function update($attributes=null)
ضا ث ضظ ضؾبی ی وس. . شس افشجبض ؾؼی ثطای ای شس اػطا ARای شس ضوضز اضائ قس سؾظ ای
افشجبضؾؼی ضا فطاذای بییس. validate ی قز. قب ی سایس ثب اؾشفبز اظ شس
public function saveAttributes($attributes)
attributeای شس سب saveبی اشربة قس ضا شذیط ی وس. ثطذلاف شس attributeای شس یؿشی اظ
چی یچ شس ضا فطاذای ی وس. beforeSave afterSaveب ضا شذیط ی وس شسبی
فیشط یب افشجبض ؾؼی ضا اػطا ی وس. ثبثط ای ای شس ضا ثطای زضذاؾشبی غیط كرم ب ا اػطا
ىیس. قب ی سایس اظ وسبی ػبیعی ظیط اؾشفبز بییس :
<pre>
$postRecord=Post::model()->findByPk($postID);
$postRecord->attributes=$_POST['post'];
$postRecord->save();
</pre>
public function delete)(
ضا حصف ی وس. ARای شس ضوضز طسجظ ثب ای
public function refresh)(
ای شس ضوضز ػبضی ضا ثب آذطی مبزیطی و زض آ لطاض زاقش اؾز ث ضظضؾبی ی وس.
public function equals($record)
ضا ثب یه ضوضز زیط مبیؿ ی وس. ARشس ضوضز ػبضی زض ای
public function getPrimaryKey()
66
ای شس مساض ویس انی ضا ثطای ضوضز ػبضی ػس ثط ی طزاس.
public function setPrimaryKey($value)
ای شس مساض ویس انی ضا ثطای ضوضز ػبضی سقیی ی وس.
public function getOldPrimaryKey()
ضا ثط ی طزاس. nullمساض لجی ویس انی ضا ثط ی طزاس اط لجلا مساضی ساقش اؾز
public function setOldPrimaryKey($value)
مساض لجی ویس انی ضا سقیی ی وس.
private function query($criteria,$all=false)
ایؼبز ی وس. queryزاز قس یه criteriaای شس ثط اؾبؼ
public function applyScopes(&$criteria)
زاز قس افب ی وس. criteriaب ضا ثطای query scopeای شس
public function getTableAlias($quote=false,
$checkScopes=true)
بی ػؿشؼ ثط ی طزاس. بی ای ػس ضا ثطای اؾشفبز زض شس aliasای شس
public function setTableAlias($alias)
بی ای ػس ضا سقیی ی وس. aliasای شس
public function find($condition='',$params=array())
ػبضی ثط اؾبؼ قطایظ سقیی قس دیسا ی وس. ARای شس یه ضوضز ضا زض
public function
findAll($condition='',$params=array())
ضا ثط ی طزاس. ARای شس سبی ضوضزبی ػز زض ای
public function
findByPk($pk,$condition='',$params=array())
دیسا ی وس. pkضا ثط اؾبؼ ویس انی افلا قس سؾظ دبضاشط ARای شس یه ضوضز ػز زض ای
67
public function
findAllByPk($pk,$condition='',$params=array())
و ویس انی آب كرم قس اؾز ضا ثط ی طزاس. ARای شس سبی ضوضزبی ػز زض ای
public function
findByAttributes($attributes,$condition='',$params=array())
افلا قس مبزیط آب دیسا ی وس. بی attributeثب ARای شس یه ضوضز ػبضی ضا زض ای
public function
findAllByAttributes($attributes,$condition='',$params=array())
افلا قس ثبقس. attributeای شس ضوضزبیی ضا دیسا ی وس و زاضای یه مساض كرم ثطای
public function findBySql($sql,$params=array())
زض sqlػؿشؼ ی وس ثط ی طزاس. فجبضر SQLای شس یه ضوضز ػز ضا ثط اؾبؼ یه فجبضر
لطاض ی یطز. sql$دبضاشط
public function findAllBySql($sql,$params=array())
كرم ی وس ثط ی طزاس.Sqlای شس سبی دبضاشطبیی ضا و فجبضر
public function count($condition='',$params=array())
كرم ی وس ثط ی طزاس.conditionای شس سقساز ضوضزبیی ضا و فجبضر
public function
countByAttributes($attributes,$condition='',$params=array())
ثط ی طزاس. ب مبزیط آ كرم قس اؾز ضا attributeای شس سقساز ضوضزبیی ضا و سؾظ
public function countBySql($sql,$params=array())
كرم ی وس ثط ی طزاس. sqlای شس سقساز ضوضزبیی ضا و فجبضر
public function exists($condition='',$params=array())
ای شس ثطضؾی ی وس و آیب ضوضزی ثب قطایظ سقیی قس ػز ؿز یب ذیط.
public function with()
68
ای س كرم ی وس و وسا قی زض ضاثغ ثبیس ثبض عاضی قز. ای شس سقساز شغیطی اظ دبضاشطب ضا
زضیبفز ی وس و ط دبضاشط ب یه ضاثغ یب ب یه فطظس ضاثغ ضا كرم ی وس. ث فا ظب :
<pre>
// find all posts together with their author and comments
Post::model()->with('author','comments')->findAll();
// find all posts together with their author and the author's
profile
Post::model()->with('author','author.profile')->findAll();
</pre>
بقس. ث عض دیف فطو دبضاشطب اظ سقبضیف ػز زض شس سقطیف قس ث relationsضاثغ ثبیس زض شس
relation ثبضعاضی ی قس اب ثطای ؾفبضقی وطز ای شس ثبیس آضای ای اظ دبضاشطب ضا ث شسwith اضؾب
بیی. و قب ب ضاثغ مساض آ ثطاثط دطؼ ػی سقطیف قس سؾظ ضاثغ اؾز. ث فا ظب :
<pre>
Post::model()->with(array(
'author'=>array('select'=>'id, name'),
'comments'=>array('condition'=>'approved=1',
'order'=>'create_time'),
))->findAll();
</pre>
public function together()
طاض ی زس و ثطای سضیحبر ثیكشط ی سا ل trueضا ثطاثط CDbCriteria::togetherای شس مساض دبضاشط
طاػق وطز. CDbCriteria::togetherث سضیحبر
public function
updateByPk($pk,$attributes,$condition='',$params=array())
ای شس ضوضزبی كرم قس سؾظ ویس انی ضا ث ضظ ضؾبی ی وس. ثطای سضیحبر ثیكشط زض ضز
ب زض ای شس افشجبض ؾؼی ی attributeطاػق وطز. ىش : findاشطبی ای شس ی سا ث شس دبض
قس.
public function
updateAll($attributes,$condition='',$params=array())
ر ثیكشط كرم ی قس ث ضظضؾبی ی وس. . ثطای سضیحب conditionای شس ضوضزبیی ضا و سؾظ
ب زض ای شس افشجبض ؾؼی attributeطاػق وطز. ىش : findزض ضز دبضاشطبی ای شس ی سا ث شس
ی قس.
69
public function
updateCounters($counters,$condition='',$params=array())
كرم قس ثبقس. ثطای conditionای شس یه یب چس فیس قبضس ضا ث ضظضؾبی ی وس و سؾظ
طاػق وطز. findسضیحبر ثیكشط زض ضز دبضاشطبی ای شس ی سا ث شس
public function
deleteByPk($pk,$condition='',$params=array())
ای شس ضوضبیی ضا و سؾظ ویس انی كرم قس اس حصف ی وس. . ثطای سضیحبر ثیكشط زض ضز
طاػق وطز. findدبضاشطبی ای شس ی سا ث شس
public function
deleteAll($condition='',$params=array())
كرم قس اس حصف ی وس. ثطای سضیحبر ثیكشط زض ضز conditionای شس ضوضبیی ضا و سؾظ
طاػق وطز. findدبضاشطبی ای شس ی سا ث شس
public function
deleteAllByAttributes($attributes,$condition='',$params=array())
كرم قس اس حصف ی وس. ثطای سضیحبر ثیكشط زض ضز attribute ای شس ضوضبیی ضا و سؾظ
طاػق وطز. findدبضاشطبی ای شس ی سا ث شس
protected function instantiate($attributes)
ضا ؾبظی ی وس. قب ی سایس اظ ای شس ظلا ثطای ؾبذز یه ضوضز ػسیس ثط ARای شس یه
اؾبؼ مساض یه فیس كرم اؾشفبز ویس.
class CBaseActiveRelation extends CComponent
ظیط اؾز :اؾز. و قب شغیطبی لبث اؾشفبز ARای ولاؼ یه ولاؼ دبی ثطای ولاؾبی
public $name; // ب قی زض ضاثغ
public $className; // ب ولاؼ
public $foreignKey; // ب ویس ذبضػی ضاثغ
public $select='*'; // ب فیس بی ػس SELECT
71
public $condition=''; // كرهبر فیشط WHERE
public $params=array(); // بضاشطب كرهبر د
public $group=''; // كرهبر ط ب GROUP BY
public $join=''; // كرهبر احبقJOIN
public $having=''; // كرهبر ق HAVING
public $order=''; // كرهبر سطسیت ORDER BY
public function addRelation($name,$config)
ایؼبز ی وس. ای شس یه ضاثغ ػسیس ضا
public function hasRelation($name)
ای شس كرم ی وس و آیب ضاثغ ای ثب ای ب ػز زاضز یب ذیط.
مذل اس طزیق کىتزلز : دستزسی ب
زض الـ زض ای اوك اؾز و یه ؾبذش ی قز. یه اوك طسجظ زض وشطط زضط س فط
اػطا ی قز. ثطای سقطیف اوك طسجظ ثب س فط ث وسبی ظیط یبظ زاضی : اظ ضی س ؾبذش
$model=new ProductModel('register');
if(isset($_POST[ProductModel]))
{
$model->attributes=$_POST[ProductModel];
}
$model=new ProductModel('register');
ایؼبز ی وس افلا ی زاضز و اظ ای س ب ثطای ProductModelاظ ضی model$ای وس یه قی ثب ب
اؾشفبز ی وی. یقی ثطای فیبر طجز زاز ب زض ثبه اعلافبسی. ای قی ؾبذش Active Recordحبز
قی اؾز قس سب یه فط ذبی اؾز یچ زاز ای زض آ لطاض ساضز. ىش لبث سػ سقیی ؾبضی ای
اؾشفبز ی وی. سقیی ؾبضی ضا ی registerو افلا ی زاضز اظ ای س ب ثطای طجز زاز ب ثب ؾبضی
سا ثطای قی ؾبذش قس ث قى ظیط یع سقیی ز :
$model=new User'register';
70
$model->scenario='register';
if(isset($_POST[ProductModel]))
ثطضؾی ی وس و آیب اعلافبر زض فط اضز قس اؾز یب ذیط. زض نضسی و زاز بی زاذ فط ای وس
اػطا راس قس. ifث زضؾشی اضز كس ثبقس افشجبضؾؼی ثب فمیز اؼب كس ثبقس ای ثن
$model->attributes=$_POST[ProductModel];
ا اؼب ی زس و ث اؾغ آ سبی اعلافبر اضز قس زض فط ض Massive Assignmentای وس فیبر
ث عض یه ػب ) سه ث سه( اضز قی س ی قز. ای اضز وطز یه ػب ثبفض افعایف ضطیت
ایز ی قز. وس ثبلا قبز وس ظیط اؾز :
foreach($_POST['LoginForm'] as $name=>$value)
{
if($name is a safe attribute)
$model->$name=$value;
}
س ب زض وشطط ط ػب و لاظ ثبقس ؾبذش ی قس شس ضز ؾط آب اػطا ی قز. ظب ظیط
لجلا سقطیف قس ثبقس شسی ثب Usersلؿشی اظ وس ػز زض وشطط اؾز ثب فطو ای و یه س ثب ب
س :زض آ ثبق Createفا
public function actionCreate()
{
$model=new Users;
if(isset($_POST['Users']))
{
$model->attributes=$_POST['Users'];
if($model->save())
$this->redirect(array('view','id'=>$model->username));
}
$this->render('create',array(
'model'=>$model,
));
}
اؼب ی قز و ث ;model->attributes=$_POST['Users']$سؾظ زؾشض model$اضؾب دبضاشطب ثطای
بی ضز یبظ س ضا سؾظ attributeفش ی قز ظیطا ث عض عب massive assignmentآ
مبزیط اضز قس سؾظ فط دط ی وس.
ظ وشطط : نساوطز شس ضز ؾط زض س سؾ
$this->render('create',array(
72
'model'=>$model,
));
model$ضا ثب مبزیط modelػز زض س ثطزاضی قس ضا اػطا ی وس. دبضاشط Createای وس شس
و Users.phpزض حشای زاذی فبی createو لجلا دط قس ثز ثطای ای شس اضؾب ی وس. اجش شس
اضص ثطی ی وس CActiveRecordاظ ولاؼ Usersولاؼ س انی اؾز كبس ی قز چ ولاؼ
سػ ویس : Usersػز ی ثبقس. ث وس ػز زض ولاؼ CActiveRecordزض ولاؼ Createشس
class Users extends CActiveRecord
یه model$ ذبضع اظ آ اط this->FieldName$زؾشطؾی ث فیسبی ػس زض زاذ س اظ عطیك
ذاس ثز model->FieldName$ اظ س ثبقس ث نضر
وکات لاسم در طزاحی مذل :
ا سنیف ی وس.ضبیی اؾز و زاز ب propertyقب -1
ؿشس. Validation Rulesقب شسبی -2
یب ط ؿ فیبر زیط ثط Searchس ظ ى اؾز قب وسبیی ثطای زؾشىبضی زاز ب ثبق -3
ضی زاز ب زض س اؼب ی قز.
GET_$ضز یبظ اؾز ظ وسبی قب end userجبیس قب وسبیی ثبقس و زض آب اعلافبر -4
$_POST .ثى ای ؿ وسب فمظ زض وشطط لبث سقطیف ی ثبقس
ؿشمیب سؾظ وبضثطا ضز اؾشبز لطاض ی یطز. ظلا جبیس قب شسب وس بیی ثبقس و -5
شسی و زض یه فط وبضثط ؿشمیب فطاذای ی قز.
اؾشفبز وطز.PHP SQLی سا اظ اظ وسبی -6
زض آ اؾشفبز وطز چ س حبز سنیفی ساضز بیف ب فمظ HTMLجبیس زض آ اظ وسبی -7
.اؼب ی قس viewاظ عطیك
س ب قلا چبق ؿشس قب وسبی ظیبزی ی قس. -8
سب ثبیس زض س اؼب قز.وی فیبر وبض دطزاظـ زاز بی ثبه اعلافبسی -9
79
يی ا
معزفی يی ا :
قبذش ی editلطاض زاضز ثب ب edit.phpب یه ی ثب ب فبی آ یىؿب اؾز ظلا ییی و زض فبی
زاضای siteController.phpث اظای ط فبی وشطط یه دق ثب ب ب ایؼبز ی قز ظلا وشطط قز.
اؾز. ی سا ث اظای ط اوك زض وشطط یه فبی ی زاقش viewزض زایطوشضی site یه دق ثب فا
ثبقی.
اؾشفبز ی وی. ظب : ()CController::renderثطای فطاذای یه ی زض وشطط اظ زؾشض
$this->render('edit');
ث وشططی و ای ی ضا فطاذای اػطا وطز اؾز this$زض زاذ ی ب ی سای ثب و ویسی
propertyNameی سای مساض this->propertyName$ب سؾظ زؾشض زؾشطؾی دیسا وی. ظلا زض ی
ضا و زض وشطط افلا قس زؾشطؾی دیسا وی.
: ارسال پارامتزا ي مقادیز آوا اس کىتزلز ب يی
$this->render('edit', array(
'var1'=>$value1,
'var2'=>$value2,
));
ی دبضاشطب زؾشطؾی دیسا وطز. ث فا ظب زض ظب ثبلا زض ی اظ عطیك ؾذؽ زض ی ی سا ث ا
$var1 $var2. .مبزیط آب فطاذای ی قز
فزاخاوی یک يی در يی دیگز
<?php $this->renderPartial('_footer'); ?>
.اظ ای ضـ چی ثطای اػطای عب چس ی زض یه نفح اؾشفبز ی قز
دستزسی ب کىتزلز اس داخل يی :
echo $this->propertyname;
74
یاضؾب دبضاشط اظ وشطط ث
$theTime = date("D M j G:i:s T Y");
$this->render('helloWorld',array('time'=>$theTime));
زضیبفز دبضاشط اضؾبی اظ وشطط سؾظ ی
<h3><?php echo $time; ?></h3>
.اقبضساضزیینبحجبی وشططػبض ثthis $ یىیزض
دستزسی ب يی اس طزیق کىتزلز :
$this->render(„edit‟);
$this->render („edit‟, array(„a‟=>‟1‟ , „b‟=>‟2‟));
اؾز زؾشطؾی دیسا وطز. 2 1ث مبزیط آب و a , $b$زض ظب ثبلا زض ی ی سا اظ عطیك
خزيجی مذل در يی : دستزسی ب
: زض س زاضی
class TblUser extends CActiveRecord
{
public function first()
{ return 1; }
زض ی زاضی :
echo TblUser::model()->first();
: viewوکات لاسم در طزاحی
یطز.نطفب بیف اعبفبر اؾز وی حبؾجبر زض وشطط اؼب ی viewوبض -1
ب شسبی س ب وشطط ب اؾشفبز وس ی ثبیس ای وبض propertyى اؾز زض ی اظ -2
ػز بیف اعلافبر ثبقس اؼب حبؾجبر.
75
GET_$ضز یبظ اؾز ظ وسبی قب end userجبیس قب وسبیی ثبقس و زض آب اعلافبر -3
$_POST وشطط لبث سقطیف ی ثبقس. ثى ای ؿ وسب فمظ زض
اؾشفبز وطز. PHP HTMLی سا اظ اظ وسبی -4
زض آ اؾشفبز وطز وبض ثب زاز ب ب فمظ اظ عطیك س اؼب ی SQLجبیس زض آ اظ وسبی -5
قس.
ی ب ثبیس سب حس اىب ؾبز قب وسبی و طط ثبقس. -6
علافبر ضا اؼب ی زس.وی فیبر طثط ث بیف ا -7
ثبیس ی سب حس اىب ؾبز لبث ف ثبقس. -8
معزفی قالب ا :
ثطای لبت ثسی وی سكىی یه نفح وب ة اؾشفبز ی قز و مبزیط طبثشی ظ layoutیه
ؾطنفح س نفح ضا زض آ لطاض زاز. ظب :
......header here......
<?php echo $content; ?>
......footer here......
قش قز حشای ی زض آ لطاض ی یطز. <? ;phpecho$content?>ط ػب
layoutاشربة ی قز ط ایى layoutث فا protected/views/layouts/main.phpث عض دیف فطو
ث ز قى لبث اؼب اؾز : layoutزیطی سقطیف قز. سغییط
CWebApplication::layoutث قى configعطیك اظ
CController::layoutث قى Controllerاظ عطیك -1
اظ زؾشض renderزض آ افب كز ث ػبی زؾشض layoutط ثرای یه ی اػطا قز یچ ا
renderPartial() .زض وشطط اؾشفبز ی وی
Layout سقطیف ی قز و ی سا آ ضا سغییط زاز : ضز اؾشفبز زض ثطب زض وشطط
public $layout='//layouts/column2';
76
ی قز layoutزیؿشض ظیط ثبفض زضع ی ب زاذ فبی layoutزض
<?php echo $content; ?>
زؾشض ظیط ضا اضز وطز: Applicationدیف فطو ی سا زض فبی layoutػز سقیی
Layout -> „LayoutName‟;
وکت :
یه ذظ فطب ث قى ظیط ػز زاضز : controller.php\protected\componentsزض فبی
public $layout='//layouts/column1';
و لبت دیف فطو ثطب ضا كرم ی وس )ثطای وشط بیی و ؼسزا لبت آب مساض زی كس
ثبقس( و ی سا آ ضا انلاح وطز.
کت :و
زض اثشسای ط فبی وشطط یع ث عض اذشهبنی ى اؾز لبت سقطیف قس ثبقس ظ :
public $layout='//layouts/column2';
دیگز : layoutدرين layoutقزار دادن یک
و ی ذای footer.php_ث ب layoutزاقش ثبقی یه main.phpث ب layoutفطو ویه یه
_footer ضا زضmain لطاض زی ثسی ؾض زضmain ط ػب ثرای_footer كب زاز قز وس ظیط ضا
ی یؿی :
<?php $this->beginContent('//layouts/_footer'); ?>
<?php echo $content; ?>
<?php $this->endContent(); ?>
Partial view
Partial view بیی ؿشس و ػز بیف زض ؾبیط یب اؾشفبز ی قس ث یب ی بی ػعئی ی
و view.php_قطؿ یكز ظ _عض ؿشم ثشط اؾز بیف زاز كس. ب فبی آب ثب وبضاوشط
طثط ث ی فطاذای كب زاز ی قز. index.phpزاذ
فطاذای یه ی زض ی زیط
77
<?php $this->renderPartial('_footer'); ?>
System View
System View ب ػز بیفerror .ب طجز ضیساز ب ث وبض ی ضس
: System Viewفىطز
1) Display errors
2) Logging information
System View ب ی بیی ؿشس و ظلا زض ب ثطظ ذغب كب زاز ی قس زض ؿیط
yii/framework/views لطاض زاضس ی ی سا زض ؿیطprotected/views/system ی بیی ثب
وطز. Overloadایؼبز وطز زض الـ ی لجی ضا ثب ی وبضثط 404errorب ب كبث ظ
error400ی ثبقس ظ errorXXXب یبی ؾیؿشی ث قى
Widget
gridviewؾبذز یه وبض ی ضز ظ یط ثثطای بیف ؾبذز یبفش مبز زؼی
یه یؼز ذز ی ساس قب یه یب چس ی ثبقس.اظ آؼبیی و یؼز ب زض ی فطاذای اؾشفبز ی
زض یه یؼز ث ی حب یؼز اقبض زاضز ث وشطط فطاذاس ی حب یؼز. this$قزس صا
طفش سب MaskTextوبضبی رشف ػز زاضز و اظ یه یؼز بی رشفی ثطای اؼب
DetailView .غیط ی ساس ثبقس
دلخا Widgetساخت یک
ایؼبز ی وی.ؾذؽ حشای آ ضا face.phpاضز قس یه فی ثب ب componentsاثشسا زض دق
ث قى ظیط سبیخ ی وی :
<?php
class face extends CWidget {
public $params = array();
public function run() {
$this->render('faceView');
}
}
?>
78
ایؼبز ی وی زاذ آ فبی componentsزض زاذ دق viewsحب یه دق ثب ب
faceView.php :ضا ایؼبز ی وی حشای آ ضا ث قى ظیط لطاض ی زی
<?php
echo $this->params['param1'];
?>
حب زض ییی انی ثطب و ی ذای ای حشا چبح قز وس ظیط ضا اضز ی وی :
<?php $this->widget('application.components.face', array(
'params' => array(
'param1' => 'Hello',
),
)); ?>
ب قلا ثطای بیف ب اؾشفبز ی قز. ظ بیف ػسا یؿز ب ... . widgetاظ
Widget ... ب قلا زاذ ی ب لطاض ی یطس سب چیع ذبنی ضا كب زس ظ یه سمی یب ؾبفز یب
ب اؾشفبز ب قجی وبذز بی اظ دیف سقطیف قس ؿشس و زض ی ب ی سا اظ آ widgetزض الـ
ف ی وس. Yii Frameworkثطای Toolboxوطز قجی
ثب لبثیز زضع حشا زض آ : widgetح اؾشفبز اظ
<?php $this->beginWidget('path.to.WidgetClass'); ?>
...body content that may be captured by the widget...
<?php $this->endWidget(); ?>
ز ثس یبظ ث حشایب ضـ
<?php $this->widget('path.to.WidgetClass'); ?>
ث طا سقطیف اضؾب دبضاشطب : widgetفطاذای
<?php $this->widget(“MyWidget”,array(„mask‟=>‟12‟ )); ?>
<?php
$this->widget('CMaskedTextField',array(
'mask'=>'99/99/9999'
));
?>
79
: widgetااؿ
1) Built-in
2) User-defined
اضص ثطی ی وس.ثطای سقطیف یه یز ػسیس سؾظ وبضثط ث قى CWidgetوی یز ب اظ ولاؼ
بیی. overrideآ ضا init runظیط ف ی وی. ثبیس شسبی
class MyWidget extends CWidget
{
public function init()
{
// this method is called by CController::beginWidget()
}
public function run()
{
// this method is called by CController::endWidget()
}
}
یبی یز بس وشطط ب یز ب یع ی ساس یبی ذز ضا زاقش ثبقس.ث عض دیف فطو
شذیط ی قس و ای دق زاذ دق ای اؾز و ولاؼ یز زض آ سقطیف viewزاذ دق ثب ب
ذاس قس renderاػطا یب ب ()CWidget::renderقس اؾز. ای ی ب سؾظ فطاذای ث قى
بس ب ضقی و ثطای فطاذای یه ی زض وشطط اؾشفبز ی قز. سب سفبر آ زض ای اؾز و
زذ ی ث یز ػبضی اقبض ی وس this$ثطای ای ی ب افب راس قس. چی layoutیچ
ث وشططی و آ ی یز ضا فطاذای وطز اؾز.
Widget
or its child classes. CWidgetshould extend from widgetA
The easiest way of creating a new widget is extending an existing widget and
overriding its methods or changing its default property values. For example, if
, you could configure its CTabViewyou want to use a nicer CSS style for
property when using the widget. You can also extend CTabView::cssFile
configure the property when as follows so that you no longer need to CTabView
using the widget.
class MyTabView extends CTabView
81
{
public function init()
{
if($this->cssFile===null)
{
$file=dirname(__FILE__).DIRECTORY_SEPARATOR.'tabview.css';
$this->cssFile=Yii::app()->getAssetManager()-
>publish($file);
}
parent::init();
}
}
method and assign to CWidget::initIn the above, we override the
the URL to our new default CSS style if the property is not CTabView::cssFile
set. We put the new CSS style file under the same directory containing the
MyTabView class file so that they can be packaged as an extension. Because
the CSS style file is not Web accessible, we need to publish as an asset.
To create a new widget from scratch, we mainly need to implement two
. The first method is called when we CWidget::runand initCWidget::methods:
use $this->beginWidget to insert a widget in a view, and the second method is
called when we call $this->endWidget. If we want to capture and process the
output content displayed between these two method invocations, we can start
for CWidget::runand retrieve the buffered output in CWidget::initin buffering
further processing.
A widget often involves including CSS, JavaScript or other resource files in the
page that uses the widget. We call these files assets because they stay together
with the widget class file and are usually not accessible by Web users. In order
to make these files Web accessible, we need to publish them using
, as shown in the above code snippet. Besides, CWebApplication::assetManager
if we want to include a CSS or JavaScript file in the current page, we need to
:CClientScriptregister it using
class MyWidget extends CWidget
{
protected function registerClientScript()
{
// ...publish CSS or JavaScript file here...
$cs=Yii::app()->clientScript;
$cs->registerCssFile($cssFile);
$cs->registerScriptFile($jsFile);
80
}
}
A widget may also have its own view files. If so, create a directory named
views under the directory containing the widget class file, and put all the view
files there. In the widget class, in order to render a widget view, use $this-
>render('ViewName'), which is similar to what we do in a controller.
4.
To create a new widget from scratch, we mainly need to implement two
methods: CWid-
get::init and CWidget::run. The _rst method is called when we use $this-
>beginWidget to
insert a widget in a view, and the second method is called when we call $this-
>endWidget.
If we want to capture and process the content displayed between these two
method invo-
cations, we can start output bu_ering in CWidget::init and retrieve the bu_ered
output
in CWidget::run for further processing.
A widget often involves including CSS, JavaScript or other resource _les in the
page that
uses the widget. We call these _les assets because they stay together with the
widget
class _le and are usually not accessible by Web users. In order to make these
_les Web
accessible, we need to publish them using CWebApplication::assetManager, as
shown in
the above code snippet. Besides, if we want to include a CSS or JavaScript _le
in the
current page, we need to register it using CClientScript:
class MyWidget extends CWidget
f
protected function registerClientScript()
f
// ...publish CSS or JavaScript file here...
$cs=Yii::app()->clientScript;
$cs->registerCssFile($cssFile);
$cs->registerScriptFile($jsFile);
g
6.3 Creating Extensions 121
g
82
A widget may also have its own view _les. If so, create a directory named views
under the
directory containing the widget class _le, and put all the view _les there. In the
widget
class, in order to render a widget view, use $this->render('ViewName'), which is
similar
to what we do in a controller.
4. Customizing Widgets Globally ¶
Note: this feature has been available since version 1.1.3.
When using a widget provided by third party or Yii, we often need to customize it for specific
needs. For example, we may want to change the value of CLinkPager::maxButtonCount from
10 (default) to 5. We can accomplish this by passing the initial property values when calling
CBaseController::widget to create a widget. However, it becomes troublesome to do so if we
have to repeat the same customization in every place we use CLinkPager.
$this->widget('CLinkPager', array(
'pages'=>$pagination,
'maxButtonCount'=>5,
'cssFile'=>false,
));
Using the global widget customization feature, we only need to specify these initial values in
a single place, i.e., the application configuration. This makes the customization of widgets
more manageable.
To use the global widget customization feature, we need to configure the widgetFactory as
follows:
return array(
'components'=>array(
'widgetFactory'=>array(
'widgets'=>array(
'CLinkPager'=>array(
'maxButtonCount'=>5,
'cssFile'=>false,
),
'CJuiDatePicker'=>array(
'language'=>'ru',
),
),
),
),
);
89
In the above, we specify the global widget customization for both CLinkPager and
CJuiDatePicker widgets by configuring the CWidgetFactory::widgets property. Note that the
global customization for each widget is represented as a key-value pair in the array, where the
key refers to the wiget class name while the value specifies the initial property value array.
Now, whenever we create a CLinkPager widget in a view, the above property values will be
assigned to the widget, and we only need to write the following code in the view to create the
widget:
$this->widget('CLinkPager', array(
'pages'=>$pagination,
));
We can still override the initial property values when necessary. For example, if in some
view we want to set maxButtonCount to be 2, we can do the following:
$this->widget('CLinkPager', array(
'pages'=>$pagination,
'maxButtonCount'=>2,
));
Portlet
Portlet و طبثز سط ؿشس ث وبض ی ضز ثط ای بیف اعلافبسی بس بفی یز اؾز .
CPortlet ولاؼ دبی ثطای یز بیPortlet .اؾز
یه ثرف اظ حشا ضا بیف یسس. فب قطف اض وبضی زض یه نفح ة اؾز. ثطای Portletیه
ی وی : ظلا :ث قى ظیط ف CPortletفطاذای یه
<?php $this->beginWidget('zii.widgets.CPortlet'); ?>
...insert content here...
<?php $this->endWidget(); ?>
یع ی ساس زاقش ثبقس.چی سؾظ سقطیف titleچی یه عی اذشیبضی ث ب Portletیه
renderDecoration ی سا ث عی بی ثیكشطی اظ حبز بیفPortlet .زؾشطؾی دیسا وطز
Property Details
contentCssClass property
public string $contentCssClass;
84
the CSS class for the content container tag. Defaults to 'portlet-content'.
decorationCssClass property
public string $decorationCssClass;
the CSS class for the decoration container tag. Defaults to 'portlet-decoration'.
hideOnEmpty property (available since v1.1.4)
public boolean $hideOnEmpty;
whether to hide the portlet when the body content is empty. Defaults to true.
htmlOptions property
public array $htmlOptions;
the HTML attributes for the portlet container tag.
tagName property
public string $tagName;
the tag name for the portlet container tag. Defaults to 'div'.
title property
public string $title;
the title of the portlet. Defaults to null. When this is not set, Decoration will not
be displayed. Note that the title will not be HTML-encoded when rendering.
titleCssClass property
public string $titleCssClass;
the CSS class for the portlet title tag. Defaults to 'portlet-title'.
Method Details
init() method
public void init()
Source Code:framework/zii/widgets/CPortlet.php#76 (show)
public function init()
{
ob_start();
ob_implicit_flush(false);
$this->htmlOptions['id']=$this->getId();
85
echo CHtml::openTag($this->tagName,$this->htmlOptions)."\n";
$this->renderDecoration();
echo "<div class=\"{$this->contentCssClass}\">\n";
$this->_openTag=ob_get_contents();
ob_clean();
}
Initializes the widget. This renders the open tags needed by the portlet. It also
renders the decoration, if any.
renderContent() method
protected void renderContent()
Source Code:framework/zii/widgets/CPortlet.php#123 (show)
protected function renderContent()
{
}
Renders the content of the portlet. Child classes should override this method to
render the actual content.
renderDecoration() method
protected void renderDecoration()
Source Code:framework/zii/widgets/CPortlet.php#109 (show)
protected function renderDecoration()
{
if($this->title!==null)
{
echo "<div class=\"{$this->decorationCssClass}\">\n";
echo "<div class=\"{$this->titleCssClass}\">{$this->title}</div>\n";
echo "</div>\n";
}
}
Renders the decoration for the portlet. The default implementation will render
the title if it is set.
run() method
public void run()
86
CActiveDataProvider
سیطیز قز. زض ط فطاذای ... CActiveDataProviderط زؾشطؾی ث زاز ب ثبیس سؾظ
سؾی قز. ظلا زض CActiveDataProviderثبیس اثشسا GridViewیب ListViewظلا زض یه
actionIndex و ثبفض اػطای ی_view ی قز و ث قى یهListView بیف زاز ی قز
ضی :زا
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Website',
array(
'criteria'=>array(
'condition'=>'visit_count > 1',
'order'=>'visit_count DESC',
),
'pagination'=>array(
'pageSize'=>2,),)
);
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
ظب زیطی ث قى ظیط اؾز :
$dataProvider=new CActiveDataProvider('Post', array(
'criteria'=>array(
'condition'=>'status=1',
'order'=>'create_time DESC',
'with'=>array('author'),
),
'pagination'=>array(
'pageSize'=>20,
),
));
// $dataProvider->getData() will return a list of Post objects
ث قى ظیط اؾز :ثطای ب ایز ظیبزی زاضز شسبی آ CActiveDataProviderولاؼ ثبثطای
87
Public Properties
Property Type Description Defined By criteria CDbCriteria Returns the query criteria. CActiveDataProvider data array Returns the data items currently
available. CDataProvider
id string Returns the ID that uniquely identifies the data provider.
CDataProvider
itemCount integer Returns the number of data items in the current page.
CDataProvider
keyAttribute string the name of key attribute for modelClass.
CActiveDataProvider
keys array Returns the key values associated with the data items.
CDataProvider
model CActiveRecord the AR finder instance (eg Post::model()).
CActiveDataProvider
modelClass string the primary ActiveRecord class name. CActiveDataProvider pagination CPagination Returns the pagination object. CDataProvider
sort CSort Returns the sorting object. CActiveDataProvider totalItemCount integer Returns the total number of data items. CDataProvider
Public Methods
Method Description Defined By call() Calls the named method which is not a class
method. CComponent
construct() Constructor. CActiveDataProvider __get() Returns a property value, an event handler list or a
behavior based on its name. CComponent
__isset() Checks if a property value is null. CComponent
set() Sets value of a component property. CComponent
unset() Sets a component property to be null. CComponent
asa() Returns the named behavior object. CComponent
attachBehavior() Attaches a behavior to this component. CComponent
attachBehaviors() Attaches a list of behaviors to the component. CComponent
attachEventHandler() Attaches an event handler to an event. CComponent
canGetProperty() Determines whether a property can be read. CComponent
canSetProperty() Determines whether a property can be set. CComponent
detachBehavior() Detaches a behavior from the component. CComponent
detachBehaviors() Detaches all behaviors from the component. CComponent
detachEventHandler() Detaches an existing event handler. CComponent
disableBehavior() Disables an attached behavior. CComponent
disableBehaviors() Disables all behaviors attached to this component. CComponent
enableBehavior() Enables an attached behavior. CComponent
enableBehaviors() Enables all behaviors attached to this component. CComponent
evaluateExpression() Evaluates a PHP expression or callback under the context of this component.
CComponent
getCriteria() Returns the query criteria. CActiveDataProvider
88
getData() Returns the data items currently available. CDataProvider
getEventHandlers() Returns the list of attached event handlers for an event.
CComponent
getId() Returns the ID that uniquely identifies the data provider.
CDataProvider
getItemCount() Returns the number of data items in the current page.
CDataProvider
getKeys() Returns the key values associated with the data items.
CDataProvider
getPagination() Returns the pagination object. CDataProvider
getSort() Returns the sorting object. CActiveDataProvider getTotalItemCount() Returns the total number of data items. CDataProvider
hasEvent() Determines whether an event is defined. CComponent
hasEventHandler() Checks whether the named event has attached handlers.
CComponent
hasProperty() Determines whether a property is defined. CComponent
raiseEvent() Raises an event. CComponent
setCriteria() Sets the query criteria. CActiveDataProvider setData() Sets the data items for this provider. CDataProvider
setId() Sets the provider ID. CDataProvider
setKeys() Sets the data item keys for this provider. CDataProvider
setPagination() Sets the pagination for this data provider. CDataProvider
setSort() Sets the sorting for this data provider. CDataProvider
setTotalItemCount() Sets the total number of data items. CDataProvider
Protected Methods
Hide inherited methods
Method Description Defined By calculateTotalItemCount() Calculates the total number of data items. CActiveDataProvider fetchData() Fetches the data from the persistent data
storage. CActiveDataProvider
fetchKeys() Fetches the data item keys from the persistent data storage.
CActiveDataProvider
CHtmlکلاط
ای ولاؼ یه ولاؼ اؾشبسیه اؾز یقی ؿشمیب ثس ؾبذز اظ ضی آ اؾشفبز ی قز
زض ی ث وبض ی ضز. HTMLػز ؾبذز اػعای
فز اؾشفبز :
<a href="/demo/index.php?r=message/goodbye">Goodbye!</a>
89
طبثز ضا ثبظ ی وس. حب Urlی قش قس اؾز یه ق HTMLوس ثبلا ضا زض ؾط ثیطیس. ای وس ثب
یب ط فز زیطی ای ح SEOاط ث ط زیی ظ سغییط ح بیف آزضؼ بی ؾبیز ثطای ثجز
بیف سغییط بیس زیط ای یه ثبظ راس قس. صا اظ وس ظیط اؾشفبز ی وی :
<?php echo CHtml::link("Goodbye",array('message/goodbye'));
?>
قش قس اؾز. ای وس زض ؿیط ػبضی CHtmlای وس ب وبض لجی ضا اؼب ی زس ی ثب ضـ
ضا ثبضعاضی ی وس. goodbye اوك messageؾبیز )ط چ ثبقس( وشطط
Public Properties
Property Type Description
afterRequiredLabel string the HTML code to be appended to the required label.
beforeRequiredLabel string the HTML code to be prepended to the required label.
count integer the counter for generating automatic input field names.
errorCss string the CSS class for highlighting error inputs.
errorMessageCss string the CSS class for displaying error messages (see error).
errorSummaryCss string the CSS class for displaying error summaries (see
errorSummary).
requiredCss string the CSS class for required labels.
Public Properties
Property Type Description afterRequiredLabel string the HTML code to be appended to the required label. beforeRequiredLabel string the HTML code to be prepended to the required label. count integer the counter for generating automatic input field names. errorCss string the CSS class for highlighting error inputs. errorMessageCss string the CSS class for displaying error messages (see error). errorSummaryCss string the CSS class for displaying error summaries (see errorSummary). requiredCss string the CSS class for required labels.
Public Methods
Method Description activeCheckBox() Generates a check box for a model attribute. activeCheckBoxList() Generates a check box list for a model attribute. activeDropDownList() Generates a drop down list for a model attribute. activeFileField() Generates a file input for a model attribute. activeHiddenField() Generates a hidden input for a model attribute. activeId() Generates input field ID for a model attribute. activeLabel() Generates a label tag for a model attribute.
91
activeLabelEx() Generates a label tag for a model attribute. activeListBox() Generates a list box for a model attribute. activeName() Generates input field name for a model attribute. activePasswordField() Generates a password field input for a model attribute. activeRadioButton() Generates a radio button for a model attribute. activeRadioButtonList() Generates a radio button list for a model attribute. activeTextArea() Generates a text area input for a model attribute. activeTextField() Generates a text field input for a model attribute. ajax() Generates the JavaScript that initiates an AJAX request. ajaxButton() Generates a push button that can initiate AJAX requests. ajaxLink() Generates a link that can initiate AJAX requests. ajaxSubmitButton() Generates a push button that can submit the current form in POST
method. asset() Generates the URL for the published assets. beginForm() Generates an opening form tag. button() Generates a button. cdata() Encloses the given string within a CDATA tag. checkBox() Generates a check box. checkBoxList() Generates a check box list. closeTag() Generates a close HTML element. css() Encloses the given CSS content with a CSS tag. cssFile() Links to the specified CSS file. dropDownList() Generates a drop down list. encode() Encodes special characters into HTML entities. encodeArray() Encodes special characters in an array of strings into HTML entities. endForm() Generates a closing form tag. error() Displays the first validation error for a model attribute. errorSummary() Displays a summary of validation errors for one or several models. fileField() Generates a file input. form() Generates an opening form tag. getActiveId() Returns the element ID that is used by methods such as activeTextField. getIdByName() Generates a valid HTML ID based on name. hiddenField() Generates a hidden input. htmlButton() Generates a button using HTML button tag. image() Generates an image tag. imageButton() Generates an image submit button. label() Generates a label tag. link() Generates a hyperlink tag. linkButton() Generates a link submit button. linkTag() Generates a link tag that can be inserted in the head section of HTML
page. listBox() Generates a list box. listData() Generates the data suitable for list-based HTML elements. listOptions() Generates the list options. mailto() Generates a mailto link. metaTag() Generates a meta tag that can be inserted in the head section of HTML
page. normalizeUrl() Normalizes the input parameter to be a valid URL.
90
openTag() Generates an open HTML element. pageStateField() Generates a hidden field for storing persistent page states. passwordField() Generates a password field input. radioButton() Generates a radio button. radioButtonList() Generates a radio button list. refresh() Registers a 'refresh' meta tag. renderAttributes() Renders the HTML tag attributes. resetButton() Generates a reset button. resolveName() Generates input name for a model attribute. resolveNameID() Generates input name and ID for a model attribute. resolveValue() Evaluates the attribute value of the model. script() Encloses the given JavaScript within a script tag. scriptFile() Includes a JavaScript file. statefulForm() Generates a stateful form tag. submitButton() Generates a submit button. tag() Generates an HTML element. textArea() Generates a text area input. textField() Generates a text field input. value() Evaluates the value of the specified attribute for the given model.
Protected Methods
Method Description activeInputField() Generates an input HTML tag for a model attribute. addErrorCss() Appends errorCss to the 'class' attribute. clientChange() Generates the JavaScript with the specified client changes. inputField() Generates an input HTML tag.
92
Theming
کل themeؾبگش یک لبلت عشس خبؿ ثشای ففض اعت ث عسی ک ثب تغییش یک themeش Yiiدس
لرار دارذ. ر WebRoot/themesب دس پؽ ای Theme ظبش عبیت هتفبت هی ؽد.
Themeب، فبیلبی اعگشیپت ... دس هسد CSSهی تاذ ؽبهل کیل یب، عشس ب، Themeپش
ثبؽذ.
ثب بم پؽ افلی آى یکغبى اعت. Themeبم ش
Themeنحه استفاده از یک
هسد ظش لشاس هی دین. ایي کبس Themeسا ثشاثش بم Themeهمذاس خبفیت configبس دس فبیل ثشای ایي ک
دس صیش تؼشیف بم عبیت لشاس گیشد. هخبل : configهی تاذ دس اثتذای فبیل
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR,'..'.
'name' => „My Web Site‟,
'timezone' => 'Asia/Tehran,'
'theme'=>'myTheme,'
ث کچک Themeثبیذ ثب سػبیت صشف کچک ثضسگ اسد ؽد چى خبفیت Themeکت : اعن
ثضسگ ثدى صشف صغبط اعت.
دس ظش گشفت ؾذ ثبؽذ همذاس Themeربسی سا پیذا کشد ک اگش یچ Themeث ؽکل صیش هی تاى
null .سا ثش هی گشداذ
Yii::app()->theme
Themeساخت یک
لشا داسذ ثب وبى بم ؽکل هتمل Protectedبیی ک دس پؽ Layoutب Viewثبیذ توبهی
Themeث دجبل آى هی گشدد اگش دس پؽ Themeفذا صد ؽد اثتذا دس View1ؽذ. اگش دس ثشبه
یؼی هغیش پیؼ فشك ث دجبل آى هی گشدد. Protectedرد ذاؽت دس هغیش
اؽبس کین. هخلا Themeکت : دس ثغیبسی اص هاسد هب یبص داسین ک ث یک فبیل یب پؽ دسى پؽ
سا فشاخای کین. ثشای ازبم ایي کبس ث ؽکل صیش هی Themeاگش ثخاین یک تقیش هرد دس پؽ
اد :تاى آدسط دی سا ازبم د
Yii::app()->theme->baseUrl . '/images/FileName.gif'
Yii::app()->theme->baseUrl هغیش پؽ هشثط ثTheme .ربسی اعت
ث ؽکل صیش اعت : basic fancyثب بم Themeپؽ ب عبختبس هشثط ث د
99
WebRoot/
assets
protected/
.htaccess
components/
controllers/
models/
views/
layouts/
main.php
site/
index.php
themes/
basic/
views/
.htaccess
layouts/
main.php
site/
index.php
fancy/
views/
.htaccess
layouts/
main.php
site/
index.php
اگش دس فبیل تظیوبت داؽت ثبؽین :
return array(
'theme'=>'basic',
......
);
فؼبل هی ؽد ک پؽ ب فبیلبی هشثع آى دس هغیش صیش لشاس داسد : basicثب بم Themeآگب
themes/basic/views/layouts
غتزئ هی کذ.ر protected/viewsاگش فبیل هشثع پیذا ؾذ آى سا دس
94
Theme ىای یگت
هی تاین یک ی رذاگب عشاصی وبیین ک دس لغوت تضیضبت یگت Fooثشای یک یگت ثب بم
هسد یبص xyz.phpخد لشاس دین هخلا اگض فبیلی ثب بم Themeآهذ اعت. اهب اگش ثخاین آى سا دس
آى سا دس پؽ صیش لشاس هی دین :بم داسد basicهشثع ک Themeیگت ثبؽذ دس
themes/basic/views/Foo/xyz.php
Skin )پستو(
ش یگت هی تاذ داسای چذیي ظبش ؽکل هتفبت ثبؽذ ک ث دلخا هی تاى آى سا تغییش داد.
هی تاذ داسای چذیي ظبش هتفبت ثب سگ فت ؽکل هتفبت ثبؽذ ک CLinkPagerهخلا یک
گفت هی ؽد. skinث ش کذام اص آب
ایي خبفیت سا ث ؽکل صیش فؼبل وبیین : configاثتذا ثبیذ دس فبیل skinثشای اعتفبد اص
return array(
'components'=>array(
'widgetFactory'=>array(
'enableSkin'=>true,
),
),
);
هسد ظش سا دس هغیش صیش لشاس داد : skinبی عپظ فبیل
protected/views/skins
ایزبد هی کین ک هضتای آى ث ؽکل protected/views/skinsسا دس هغیش CLinkPager.phpصبل فبیل
صیش اعت :
<?php
return array(
'default'=>array(
'nextPageLabel'=>'>>',
'prevPageLabel'=>'<<',
),
'classic'=>array(
'header'=>'',
'maxButtonCount'=>5,
),
);
95
ؽبخت هی ؽذ. صبل ثشای اعتفبد اص default classicایزبد ؽذ ک ثب بم skinدس هخبل ثبلا د
skin : هسد ظش دس تؼشیف یگت خد داسین
<?php $this->widget('CLinkPager'); ?>
<?php $this->widget('CLinkPager', array('skin'=>'classic'));
?>
باوک ای اطلاعاتی
Yii اظPDO و رففPHP Data Objects و یىی اظ ؾطیؿبی ثبه اعلافبسی اؾز اؾشفبز ی بیس
طزس. یؿز ای ؾطیؿب ث قى ظیط ی ثبقس : فقب Apacheای ؾطیؿب ثبیس زض یعثب بس
PDO extension
PDO SQLite extension
PDO MySQL extension
PDO PostgreSQL extension
اواع ريش کار با باوک اطلاعاتی :
ث ؾ ضـ اىب وبض ثب ثبه اعلافبسی ػز زاضز : yiiزض
1- DAO :
Yii Data Access Objects آ و رففDAO اؾز اىب زؾشطؾی ث ااؿ ؾیؿش سیطیز ثبه
ضا فطا ی وس. DBMSاعلافبسی یب
2- Query Builder :
Query Builder ؾطیؿی قی طا ثطای زؾشطؾی ث دطؼ ػ بیSQL اؾز و اظ ؾط ایشی ثبفض
ی قس. SQL injectionوبف ذغطار ح اظ ؿ
3- AR :
96
Active Record یب AR اظObject-Relational Mapping یب ORM اؾشفبز ی وس و ثطب یؿی ثبه
ث نضر ثؿیبض ؾبز زض ی آضز. زض ای س یه ػس زض SQLاعلافبسی ضا ثس یبظ ث دطؼ ػ بی
لبت یه ولاؼ یه ضوضز آ ای اظ آ ولاؼ قطفی ی قز.
لاعاتی :ک اطواتصال ب با
اظ آؼبیی و ای فس زض وبض ثب ثبه اعلافبسی ایؼبز یه اضسجبط اؾز زض ای لؿز ح اسهب ضا ثطضؾی
configی وی و ضز یبظ زض سب ضقب اؾز. ثطای ثطلطاضی اضسجبط ثب ثبه اعلافبسی ثبیس زض فبی
قى ظیط سقطیف ی قز : سؾیبر طثع ضا اؼب زاز. لبت وی ای اضسجبط ث
$connection=new CDbConnection($dsn,$username,$password);
// establish connection. You may try...catch possible
exceptions
$connection->active=true;
......
$connection->active=false; // close connection
ثؿشی زاضز و ی ساس یىی اظ مبزیط ظیط ثبقس : PDO database driverث DSNؿ
SQLite: sqlite:/path/to/dbfile
MySQL: mysql:host=localhost;dbname=testdb
PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
SQL Server: mssql:host=localhost;dbname=testdb
Oracle: oci:dbname=//localhost:1521/testdb
یه اظ آ ث قى ظیط اؾز :
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=db1,
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
),
ىش : سب ثبه بی اعلافبسی ظیط دكشیجبی ی قس :
MySQL 4.1 or later PostgreSQL 7.3 or later SQLite 2 and 3
97
Microsoft SQL Server 2000 or later Oracle
زؾشطؾی دیسا وطز. DB connectionث Yii::app()->dbىش : زض ط وؼبی ثطب ی سا اظ عطیك
Data Access Objects (DAO)
DAO سی ثب اؾشفبز اظ یه ضـ زؾشطؾی ث ثبه اعلافبgeneric API ی ثبقس. و لبثیز وبض ثب ااؿ
DBMS .ضا زاضزDAO : اظ چبض ولاؼ انی ظیط سكىی قس اؾز
CDbConnection: represents a connection to a database. CDbCommand: represents an SQL statement to execute against a database. CDbDataReader: represents a forward-only stream of rows from a query result set. CDbTransaction: represents a DB transaction.
SQLاجزای دسترات
ث عض ؿشمی ضز اؾشفبز لطاض ی یطز. زؾشضار sqlوی زؾشضار وبض ثب زاز ب اظ عطیك زؾشضار
اػطا ی قس. ح سقطیف یه زؾشض ث قى ظیط اؾز : CDbCommandلاؼ سؾظ و
$command=$connection->createCommand($sql);
ح اػطای زؾشضار یع ث قى ظیط اؾز :
$rowCount=$command->execute(); // execute the non-query SQL
$dataReader=$command->query(); // execute a query SQL
$rows=$command->queryAll(); // query and return all rows
of result
$row=$command->queryRow(); // query and return the first
row of result
$column=$command->queryColumn(); // query and return the first
column of result
98
$value=$command->queryScalar(); // query and return the first
field in the first row
یع اؾشفبز ی قز. Query Builderىش : اظ زؾشضار فق زض ضـ
فزاخاوی وتایج
ث قى ظیط اؾز : CDbDataReaderبفز شبیغ ثب اؾشفبز اظ ولاؼ ح زضی SQLدؽ اظ اػطای یه زؾشض
$dataReader=$command->query();
// calling read() repeatedly until it returns false
while(($row=$dataReader->read())!==false) { ... }
// using foreach to traverse through every row of data
foreach($dataReader as $row) { ... }
// retrieving all rows at once in a single array
$rows=$dataReader->readAll();
وح کار با تزاکىص ا
ثبقس. سطاوف طح ث طح اػطا sql اؾز و ی ساس قب چسیس زؾشض queryسطاوف اػطای یه
ی قز سب اشب اط طاح ث زضؾشی اػطا قس افب ی قز اط حشی یه زؾشض ثب ذغب اػ
اؼب ی قز. یه CDbTransactionاػطای سطاوف ب سؾظ ولاؼ قز و سطاوف غ ی قز.
سطاوف ث قى ظیط ف ی وس :
سطاوف ضا قطؿ ی وس -
ضا یىی یىی دكز ؾط اػطا ی وس. یچ شیؼ ای اظ اؼب ط وسا اظ sqlزؾشضار -
ای طاح لبث كبس یؿز.
ث ضظ ضؾبی .. اط سطاوف سب اشب ث زضؾشی اؼب قز سؾیبر ضا و قب ایؼبز/ -
اؾز ث عض یىؼب اػطا ی وس شیؼ بیی لبث لاحؾ اؾز.
.ثب ذغب اػ قز و سطاوف غ ذاس قس queryاط حشی یىی اظ زؾشضار -
مثال :
$transaction=$connection->beginTransaction();
99
try
{
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
$transaction->rollBack();
}
اوقیاد پارامتز ا :
Sqlػیطی قز چی ثطای افعایف وبضایی اػطای زؾشضار SQL injectionثطای ایى اظ حلار
ث ػبی دبضاشط بی فش ی قز placeholdersی سایس اظ دبضاشطبی وىی و ث آب ػب ساض یب
انی اؾشفبز بییس. ظب :
// an SQL with two placeholders ":username" and ":email"
$sql="INSERT INTO tbl_user (username, email)
VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual
username value
$command->bindParam(":username",$username,PDO::PARAM_STR);
// replace the placeholder ":email" with the actual email
value
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();
011
: اوقیاد فیلذا
$sql="SELECT username, email FROM tbl_user";
$dataReader=$connection->createCommand($sql)->query();
// bind the 1st column (username) with the $username variable
$dataReader->bindColumn(1,$username);
// bind the 2nd column (email) with the $email variable
$dataReader->bindColumn(2,$email);
while($dataReader->read()!==false)
{
// $username and $email contain the username and email in
the current row
}
Table Prefixاستفاد اس
ی سا ثطای ػسا یه ثبه اعلافبسی یه دیف ب كرم وطز زض ازا وبض ثس یبظ ث ضػؿ ث
ضا _tblزض ب ؾبذز س ی سا دیف ب ػسا ظلا giiدیف ب اظ ػس اؾشفبز ز. زض اثعاض
كرم ز.
$sql='SELECT * FROM {{user}}';
$users=$connection->createCommand($sql)->queryAll();
Query Builder
ث فا ظب یه دطؼ ثبه اعلافبسی ی ثبقس. فبنط ای ضـ یه ضـ قی طا ثطای زؾشطؾی ث
زض ای ضـ ث قى ظیط قش ی قز : SQLػی
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
010
Query Builderمشایای ريش
دیبز ؾبظی دطؼ ػ بی دیچیس -
ضا وبف ی زس SQL injectionذغط ح ؿ -
ب ػسا فیسب ضا ث ای كرم ی وس و اىب سساذ بب ػز ساقش -
ثبقس.
ػز اشمب ثبه اعلافبسی سغییط ؾیؿش سغبثك ػز زاضز كىی ایؼبز ی وس. -
: ایجاد دسترات
$command = Yii::app()->db->createCommand();
اد پزط ي ج ا :ایج
Select
// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
selectDistinct
SELECT DISTINCT `id`, `username`
From
// FROM `tbl_user`
from('tbl_user')
012
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from('tbl_user u, public.tbl_profile p')
// FROM `tbl_user`, `tbl_profile`
from(array('tbl_user', 'tbl_profile'))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array('tbl_user', '(select * from tbl_profile) p'))
where
// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
// WHERE id=1 OR id=2
where(array('or', 'id=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))
order
// ORDER BY `name`, `id` DESC
order('name, id desc')
// ORDER BY `tbl_profile`.`name`, `id` DESC
order(array('tbl_profile.name', 'id desc')
limit and offset
// LIMIT 10
limit(10)
019
// LIMIT 10 OFFSET 20
limit(10, 20)
// OFFSET 20
offset(20)
join and its variants
// JOIN `tbl_profile` ON user_id=id
join('tbl_profile', 'user_id=id')
// LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND
type=:type
leftJoin('pub.tbl_profile p', 'p.user_id=id AND type=:type',
array(':type'=>1))
group
// GROUP BY `name`, `id`
group('name, id')
// GROUP BY `tbl_profile`.`name`, `id`
group(array('tbl_profile.name', 'id')
having
// HAVING id=1 or id=2
having('id=1 or id=2')
// HAVING id=1 OR id=2
having(array('or', 'id=1', 'id=2'))
union
// UNION (select * from tbl_profile)
union('select * from tbl_profile')
اجزای پزط ي ج ا
ثطای اػطای دطؼ ػ ب اقبض قس ی سا DAOدؽ اظ قش دطؼ ػی ضز ؾط ث ضقی و زض
دطؼ ػ ضا اػطا ز. ظب :
$users = Yii::app()->db->createCommand()
->select('*')
->from('tbl_user')
014
->queryAll();
ایجاد ضذ : SQLب دست آيردن عبارت
ایؼبز قس ضا ث زؾز آضز. ظب : Sqlی سا فجبضر textسؾظ شس
$sql = Yii::app()->db->createCommand()
->select('*')
->from('tbl_user')
->text;
ب کار بزدن دسترات جایگشیه :
ی سا ثقضی اظ زؾشضار ضا ثطای سغبثك ثب قی طایی ث قى زیطی یع قز. ظب :
$command->select(array('id', 'username'));
$command->select = array('id', 'username');
یب ظبی ثطای ایؼبز یه دؽ ػ :
$row = Yii::app()->db->createCommand(array(
'select' => array('id', 'username'),
'from' => 'tbl_user',
'where' => 'id=:id',
'params' => array(':id'=>1),
))->queryRow();
: چىذ پزط ي ج کار با
شبیغ ()reset. زض ط ػبیی ثب وبض وطز command$ی سا ثط ضی چس دطؼ ػ ثب یه سذ ظ
:لجی ضا دبن وطز. ظب
$command = Yii::app()->createCommand();
$users = $command->select('*')->from('tbl_users')->queryAll();
$command->reset(); // clean up the previous query
$posts = $command->select('*')->from('tbl_posts')->queryAll();
015
پزط ي ج ای کار با داد :
Insert
// build and execute the following SQL:
// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name,
:email)
$command->insert('tbl_user', array(
'name'=>'Tester',
'email'=>'tester@example.com',
));
Update
// build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update('tbl_user', array(
'name'=>'Tester',
), 'id=:id', array(':id'=>1));
Delete
// build and execute the following SQL:
// DELETE FROM `tbl_user` WHERE id=:id
$command->delete('tbl_user', 'id=:id', array(':id'=>1));
پزط ي ج ای کار با ساختار :
: Query Builderؿ زاز بی ضز اؾشفبز زض
pk: a generic primary key type, will be converted into int(11) NOT NULL
AUTO_INCREMENT PRIMARY KEY for MySQL;
string: string type, will be converted into varchar(255) for MySQL;
text: text type (long string), will be converted into text for MySQL;
integer: integer type, will be converted into int(11) for MySQL;
float: floating number type, will be converted into float for MySQL;
decimal: decimal number type, will be converted into decimal for MySQL;
datetime: datetime type, will be converted into datetime for MySQL;
timestamp: timestamp type, will be converted into timestamp for MySQL;
time: time type, will be converted into time for MySQL;
016
date: date type, will be converted into date for MySQL;
binary: binary data type, will be converted into blob for MySQL;
boolean: boolean type, will be converted into tinyint(1) for MySQL.
createTable
// CREATE TABLE `tbl_user` (
// `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
// `username` varchar(255) NOT NULL,
// `location` point
// ) ENGINE=InnoDB
createTable('tbl_user', array(
'id' => 'pk',
'username' => 'string NOT NULL',
'location' => 'point',
), 'ENGINE=InnoDB')
renameTable
// RENAME TABLE `tbl_users` TO `tbl_user`
renameTable('tbl_users', 'tbl_user')
dropTable
// DROP TABLE `tbl_user`
dropTable('tbl_user')
truncateTable
// TRUNCATE TABLE `tbl_user`
truncateTable('tbl_user')
addColumn
// ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL
addColumn('tbl_user', 'email', 'string NOT NULL')
dropColumn
// ALTER TABLE `tbl_user` DROP COLUMN `location`
dropColumn('tbl_user', 'location')
017
renameColumn
// ALTER TABLE `tbl_users` CHANGE `name` `username`
varchar(255) NOT NULL
renameColumn('tbl_user', 'name', 'username')
alterColumn
// ALTER TABLE `tbl_user` CHANGE `username` `username`
varchar(255) NOT NULL
alterColumn('tbl_user', 'username', 'string NOT NULL')
addForeignKey
// ALTER TABLE `tbl_profile` ADD CONSTRAINT
`fk_profile_user_id`
// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
// ON DELETE CASCADE ON UPDATE CASCADE
addForeignKey('fk_profile_user_id', 'tbl_profile', 'user_id',
'tbl_user', 'id', 'CASCADE', 'CASCADE')
dropForeignKey
// ALTER TABLE `tbl_profile` DROP FOREIGN KEY
`fk_profile_user_id`
dropForeignKey('fk_profile_user_id', 'tbl_profile')
createIndex
// CREATE INDEX `idx_username` ON `tbl_user` (`username`)
createIndex('idx_username', 'tbl_user')
dropIndex
// DROP INDEX `idx_username` ON `tbl_user`
dropIndex('idx_username', 'tbl_user')
018
Active Record
AR ضقی ثطای وبض ثب ثبه اعبفبسی اؾز و زض آ یبظی ث اؾشفبز اظ وسبیSQL ی ثبقس وبلا
ؾیبر زض س اؼب ی جشی ثط قی طایی اؾز. وی وسب زاذ اوك وشطط قش ی قس س
قز. ظلا فطاذای یه س ؾبذش قس زض وشطط ی ساس ث قى ظیط ثبقس :
$models = Enquiry::model()->findAllByAttributes(
array(),
"enquiry_status < 5 AND enquiry_date >=:enquiry_date",
array('enquiry_date'=>date('Y-m-d H:i:s')))
);
: طبق تضیح قبلاتصال ب باوک اطلاعاتی -1
AR Classتعزیف -2
قطف یه ػس اظ ثبه اعلافشی ARزاضی ط ولای ARثطای ازض وبض ب یبظ ث یه س اظ ؿ
ی ثبقس ط قی یب ؾبذش قس اظ ضی ای ولاؼ قطف یه ضوضز اظ ثبه اعلافبسی اؾز.
ی ثبقس : tbl_postضز یبظ ثطای ؾبذز ولاؼ س وسبی ظیط حسال وس
class Post extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'tbl_post';
}
}
ث configاظ آؼبیی و سبی س بی ب زض چسی فبی ػساب سقطیف ی قس ی سا زض فبی
زؾشطؾی ث فبیبی آ ث نضر یىؼب ضاحز وطز سب importضا protected/modelsزایطوشضی قى ظیط
ثبقس :
return array(
'import'=>array(
'application.models.*',
019
),
);
ث عض دیف فطو ب ولاؼ س ثب ب ػس ثبه اعلافبسی یىؿب اؾز.
زض ولاؼ س ث قى ظیط ف ی وی : prefixثطای سقطیف ب ػس ثب اؾشفبز اظ
public function tableName()
{
return '{{post}}';
}
و دیف ب آ ط چ ثبقس حبػ ی قز ظلا اط دیف ی قز postای وس ثبفض سقطیف ػسی ثب ب
سقطیف ی قز زض آیس ی سا دیف ب ػس ضا tbl_postسقطیف قس ثبقس ب انی _tblب آ
سغییط زاز ثس یبظ ث سغییط وسبی ولاؼ س.
ی ثبقس اط ایغض یؿز ط ػسی و ثب آ وبض ی وی ثبیس ث عض دیف فطو زاضای یه ویس ان
ثبیس اظ عطیك شس ظیط یه فیس ضا ث فا ویس انی سقطیف بیی. ىش : اط ػس اظ لج زاضای ویس
انی ثبقس یبظی ث ای وس یؿز :
public function primaryKey()
{
return 'id';
// For composite primary key, return an array like the
following
// return array('pk1', 'pk2');
}
ساخت رکرا -3
ثطای ط وبضی اثشسا ثبیس یه اظ ولاؼ س ؾبذش قز و ای قبز یه ضوضز اؾز ای
وبض ث قى ظیط اؼب ی قز :
$post=new Post;
ب ولاؼ س Postایؼبز ی قز. Postؼ ایؼبز ی وس و اظ ضی ولا post$وس فق یه قی ثب ب
یىؿب اؾز. Postاؾز و ثب ب ػس یقی ػس
ح ؾبذز یه ضوضز ػسیس ، مساض زی ث فیس بی آ شذیط بیی :
$post=new Post;
$post->title='sample post';
001
$post->content='content for the sample post';
$post->create_time=time();
$post->save();
ىش : ثطای ویس انی و ث نضر ذزوبض مساض آ اضبف ی قز یبظی ث قش آ فیس یؿز
دؽ اظ ایؼبز ط ضوضز مساض فیس ویس انی ث عض ذزوبض اضبف ی قز.
دستزسی ب مقذار یک فیلذ اس رکرد :
اظ ضوضز ث قى ظیط ی سا ف وطز : ثطای زؾشطؾی ث مساض یه فیس
echo $post->title;
اظ ضوضز ػبضی چبح قز. چی ثطای مساض titleای ظب ثبفض ی قز و مساض ػز زض فیس
زی آ ث قى ظیط ی سا ف وطز.
$post->title = „hello‟;
فط یع ث قى ظیط ف ی وی : ثطای دط وطز ضوضز ػبضی ثب مبزیط اضز قس سؾظ
// assume $_POST['Post'] is an array of column values indexed
by column names
$post->attributes=$_POST['Post'];
استفاد اس تابع است :
ث زاضای یه ؾطی ساثـ دیف فطو ؿشس و ی سا اظ آب اؾشفبز ز MySQLط بؾز بس
زض مساض زی یه فیس MySQLػز زض ()MySQL NOWثطای اؾشفبز اظ سبثـ زضی فا ظب
ث قى ظیط ف ی وی :CDbExpressionثب اؾشفبز اظ سبثـ
$post=new Post;
');NOW()>create_time=new CDbExpression('-$post
// $post->create_time='NOW()'; will not work because
// 'NOW()' will be treated as a string
$post->save();
ىش : ثؿیبضی اظ الـ یبظ زاضی و ثسای چ زؾشضی زض ثطب اػطا قس و ای وبض ضا ی سا ث
طاػق ز. logزض ثطب اؼب زاز ث فبی loggingضاحشی ثب اؾشفبز اظ فقب وطز ذبنیز
000
رکرد ا خاوذن -4
ثطای ذاس ضوضزبی یه ػس ثبیس اظ یىی اظ شسبی ػؿشؼؼ ظیط اؾشفبز وطز :
// find the first row satisfying the specified condition
$post=Post::model()->find($condition,$params);
// find the row with the specified primary key
$post=Post::model()->findByPk($postID,$condition,$params);
// find the row with the specified attribute values
$post=Post::model()-
>findByAttributes($attributes,$condition,$params);
// find the first row using the specified SQL statement
$post=Post::model()->findBySql($sql,$params);
ظب :
public function actionX()
{
$model = Website::model()->findbyPk(3);
$this->renderText($model->title);
}
ث نضر اؾشبسیه اؾز زض سبی ػؿشؼب ضطضی اؾز. ثطای ط ولاؼ ث modelىش : شس
ز. ای ػؿشؼ یه ضوضز ضا ثط ی طزاس و ث قطؿ ػؿشؼ اؾ <-()MyModel::model$قى
نضر قی طا ی سا ث آ زؾشطؾی دیسا وطز.
دؽ اظ ایى سؾظ یه سبثـ ػؿشؼ ضوضز ضز ؾط دیسا قس ث قى ظیط ی سا ث فیسبی آ ث
ضاحشی زؾشطؾی دیسا وطز :
echo $post->title;
ضا ثط ی طزاس. nullدیسا ىس مساض زض نضسی و یچ ضوضزی ضا findشس
condition$دبضاشط
ف ی وس SQLزض WHEREای دبضاشط ضقش ای اؾز و قبز زؾشض
002
params$دبضاشط
condition$ای دبضاشط قب آضای اظ دبضاشطب اؾز و مبزیط آب ث ػبساضبی سقطیف قس زض ضقش
: اقبض ی وس. ظب
// find the row with postID=10
', =:postID>find('postID-$post=Post::model()
'=>10));:postIDarray('
ثطای ؾبذز دطؼ ػ بی دیكطفش سط اؾشفبز ز. ای دبضاشط condition$چی ی سا اظ دبضاشط
ب اػبظ ی زس دطؼ ػ بیی ثیؿی و ثبقس و ای وبض ث CdbCriteriaی ساس ای اظ ولاؼ
سابیی زاضس. ظب : WHEREثیف اظ زؾشض
$criteria=new CDbCriteria;
$criteria->select='title'; // only select the 'title' column
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params is not needed
ی ثبقس ظیطا و ای condition$ىش : لشی اظ ضـ ثبلا اؾشفبز ی قز یبظی ث اؾشفبز اظ دبضاشط
اؾشفبز سقطیف ی قز. CdbCriteriaدبضاشط زض سقطیف
قز و ثب لجی یىی اؾز :وس ثبلا ضا ی سا ث قى ظیط ؾبز سط
$post=Post::model()->find(array(
'select'=>'title',
'condition'=>'postID=:postID',
'params'=>array(':postID'=>10),
));
لشی و ثرای ػؿشؼی ب ثیف اظ یه شیؼ زض ثط زاقش ثبقس )اجش زض نضر ػز( ثبیس اظ شسبی
ػبی شسبی ثبلا اؾشفبز وطز و سب یه ضوضز ضا ثط ی طزاسس :ظیط ث
// find all rows satisfying the specified condition
$posts=Post::model()->findAll($condition,$params);
// find all rows with the specified primary keys
$posts=Post::model()-
>findAllByPk($postIDs,$condition,$params);
009
// find all rows with the specified attribute values
$posts=Post::model()-
>findAllByAttributes($attributes,$condition,$params);
// find all rows using the specified SQL statement
$posts=Post::model()->findAllBySql($sql,$params);
ىش : زض اؾشفبز اظ ای شسب اط یچ شیؼ )ضوضزی( یبفز كز یه آضای ذبی ثط طزاس ی قز ثط
ضا ثط ی طزاسس. nullفىؽ شسبی لجی و
فلا ثط شسبی فق چس شس وىی ظیط یع ی ساس اؾشفبز قز :
// get the number of rows satisfying the specified condition
$n=Post::model()->count($condition,$params);
// get the number of rows using the specified SQL statement
$n=Post::model()->countBySql($sql,$params);
// check if there is at least a row satisfying the specified
condition
$exists=Post::model()->exists($condition,$params);
ب ريس رساوی رکردا : -5
فیبر ث Saveدؽ اظ ؾبذز یه اظ ولاؼ و قطف یه ضوضز اؾز ی سا ثب اؾشفبز اظ شس
ضظ ضؾبی ضا اؼب زاز ظب :
$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save(); // save the change to database
ثبفض شذیط قس آ ضوضز ی saveایؼبز قس ثبقس شس newاط یه ضوضز ػسیس ثب و ویسی
ثبفض شذیط آ ی saveفطاذای قس ثبقس شس findقز اط ای ضوضز سؾظ یىی اظ شسبی
قز.
طاذای آب ػز زاضز و ث قى ظیط اؾز :ضـ زیطی یع ثطای ث ضظ ضؾبی ضوضزب ثس ف
// update the rows matching the specified condition
Post::model()->updateAll($attributes,$condition,$params);
// update the rows matching the specified condition and
primary key(s)
004
Post::model()->updateByPk($pk,$attributes,$condition,$params);
// update counter columns in the rows satisfying the specified
conditions
Post::model()->updateCounters($counters,$condition,$params);
$attributes .آضای ای اظ مبزیط فیس ب اؾز
$counters ض ذزوبض اضبف ی قز. آضای ای اظ مبزیط و مساضقب ث ع
ؾبیط دبضاشط ب لجلا سضیح زاز قس اؾز.
حذف رکرد ا : -6
بس ضـ ث ضظ ضؾبی ای فیبر یع ث ز ضـ لبث اؼب اؾز.
ضـ ا :
$post=Post::model()->findByPk(10); // assuming there is a post
whose ID is 10
$post->delete(); // delete the row from the database table
ضـ ز :
// delete the rows matching the specified condition
Post::model()->deleteAll($condition,$params);
// delete the rows matching the specified condition and
primary key(s)
Post::model()->deleteByPk($pk,$condition,$params);
: اعتبار سىجی داد ا -7
زض ثؿیبضی اظ اضز لج اظ اؼب یه فیبر ی ذای ثجیی و آیب افشجبضؾؼی بؾت زض ضز
ضا زض س ثطای rulesشس saveث عض ذزوبض ب اػطای شس ARزاز ب اؼب طفش ایز یب ذیط.
زض وشطط اػطای شس ضا ث قى ظیط سیطیز وی و ثبفض ی افشجبض ؾؼی اػطا ی وس ی سای
قز زض نضر ثطظ ذغب ث وشط ثطب زؾشطؾی زاقش ثبقی :
if($post->save())
{
// data is valid and is successfully inserted/updated
}
else
{
005
// data is invalid. call getErrors() to retrieve error
messages
}
چىذ متذ مفیذ در کلاط مذل : -8
اظ شسبی ظیط ی سا زض ولاؼ س اؾشفبز ز :
beforeValidate and afterValidate: these are invoked before and after validation is
performed.
beforeSave and afterSave: these are invoked before and after saving an AR instance.
beforeDelete and afterDelete: these are invoked before and after an AR instance is
deleted.
afterConstruct: this is invoked for every AR instance created using the new operator.
beforeFind: this is invoked before an AR finder is used to perform a query (e.g.
find(), findAll()). This has been available since version 1.0.9.
afterFind: this is invoked after every AR instance created as a result of query.
ARب کارگیزی تزاکىص ا در -9
ی ثبقس و ؾبذش dbConnectionثب ب propertyزاضای یه ARط ؾبذش قس اظ ضی
زض transactionف ب اظ اؾز . ب ی سای ثطای وبض ثب سطاو CDbConnectionقس ای اظ ضی ولا
نضر یبظ اؾشفبز وی. ظب :
$model=Post::model();
$transaction=$model->dbConnection->beginTransaction();
try
{
// find and save are two steps which may be intervened by
another request
// we therefore use a transaction to ensure consistency
and integrity
$post=$model->findByPk(10);
$post->title='new post title';
$post->save();
$transaction->commit();
}
catch(Exception $e)
{
$transaction->rollBack();
}
006
11- Named Scopes
كبط یه دطؼ ػی زاضای ب اؾز و ی ساس ثب یه دطؼ ػی زیط Named Scopeط
ف وس. ARسطویت قس زض یه دطؼ ػی
اؾز. SQLقطف یه دطؼ ػی named scopeطفش قس اؾز. ط Ruby On Railsای ایس اظ
ظب :
class Post extends CActiveRecord
{
......
public function scopes()
{
return array(
'published'=>array(
'condition'=>'status=1',
),
'recently'=>array(
'order'=>'create_time DESC',
'limit'=>5,
),
);
}
}
حب ی سا ث شیؼ دطؼ ػ ث قى ظیط زؾشطؾی دیسا وطز :
$posts=Post::model()->published()->recently()->findAll();
چی :
Post::model()->published()->recently()->delete();
چی ی سا اظ ضـ اضؾب دبضاشطب اؾشفبز وطز. ظب :
public function recently($limit=5)
{
$this->getDbCriteria()->mergeWith(array(
'order'=>'create_time DESC',
'limit'=>$limit,
));
return $this;
}
007
ح فطاذای :
$posts=Post::model()->published()->recently(3)->findAll();
ضاثغ ای : Active Record
ضا ثطضؾی وطزی زض ای لؿز ث ح ثبظیبثی ARلجی ح زضیبفز اعلافبر اظ یه س غبتزض
اعلافبر اظ یه ثبه اعلافبسی ضاثغ ای ذای دطزاذز.
ظیط ضا زض ؾط ثیطیس :ثطای ثطضؾی ای غت ظب
ااؿ ضاثغ :
tbl_user tbl_profile: ظ 1-1
tbl_user tbl_post ظ : 1-Many
tbl_category tbl_post ظ : Many – Many
008
ااؿ حبز سقطیف ضاثغ زض س :
: BELONGS_TO اگر رابط بیي جذلA B چذ باشذ هی -1از ع
Post belongs to Userظب B belongs to Aتاین بگیین :
HAS_MANY :جذل بیي رابط اگر A B چذ باشذ هی -1از ع
User has many Postظب A has many Bتاین بگیین :
HAS_ONE ایي یک حالت خاص از :HAS_MANY است ک در آىA
User has at most one Profileباشذ. هثال Bحذاکثر شاهل یک
MANY_MANY چذ است. اکثر -: ایي حالت هربط ب رابط چذ
چذ را پشتیبای نمی کذ -باک ای اطلاعاتی رابط چذ
چذ تمسین کرد در هثال -1 1-بیذ آى را ب د رابط چذ
همیي کار را برای ها انجام هی دذ. tbl_post_categoryفق جذل
Post belongs to many Category Category has many Postهثال
وح تعزیف یک رابط در مذل :
سقطیف یه ضاثغ زض یه س زاضای ای ظیط اؾز :
'VarName'=>array('RelationType', 'ClassName', 'ForeignKey',
...additional options)
ع رابط است ک در لسوت RelationTypeب ضاثغ اؾز VarNameو زض آ
لبلی تضیح آى داد شذ هی تاذ یکی از همادیر زیر
باشذ :
self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY and self::MANY_MANY;
ClassName ام کلاشAR در رابط با اییي کلاشAR .است
ForeignKey است.ام کلیذ یا کلیذای خارجی در رابط
ب شکل زیر User Postب عاى هثال رابط بیي جذال
Postتعریف هی شد : برای
009
class Post extends CActiveRecord
{
......
public function relations()
{
return array(
'author'=>array(self::BELONGS_TO, 'User',
'author_id'),
'categories'=>array(self::MANY_MANY, 'Category',
'tbl_post_category(post_id, category_id)'),
);
}
}
User برای
class User extends CActiveRecord
{
......
public function relations()
{
return array(
'posts'=>array(self::HAS_MANY, 'Post',
'author_id'),
'profile'=>array(self::HAS_ONE, 'Profile',
'owner_id'),
);
}
}
بیس ىش : یه ویس ذبضػی ى اؾز سطویجی ثبقس یقی شكى اظ ز یب چس فیس ثبقس زض ای نضر ث
categoriesچس ثبلا ثی ػسا -آ فیس ب ضا ثب وبب اظ ػسا وطز ث فا ظب زض ضاثغ چس
post :کلیذ ب طرت زیر هشخض هی شد
tbl_post_category(post_id, category_id).
021
اجزای پزط ي ج ای رابط ای :
: Lazy Loadingضـ
ی یس. ای ضـ ضا ضـ ثبضعاضی سج
// retrieve the post whose ID is 10
$post=Post::model()->findByPk(10);
// retrieve the post's author: a relational query will be
performed here
$author=$post->author;
قبض وس و مساضی ىش : اط زض ای ضاثغ قش قس یچ مساضی ػز جبقس یقی ضاثغ ث ػبیی ا
BELONGS_TOثططزاس ی قز. ثطای empty یب یه مساض nullثطای آ ػز ساضز یه مساض
HAS_ONE همذارnull برگرداذ هی شد. برایHAS_MANY MANY_MANY
یک آرای ای از HAS_MANY MANY_MANYثططزاس ی قز. زلز ویس و emptyمساض
اشیاء را بر هی گرداذ بابر ایي در ایي رابط ا ممکي
ثط ذضز بییس. "Trying to get property of non-object"است با اشکال
زض ای اؾز و فیبر ثبظیبثی سب ثطای یه ضوضز اؼب ی یطز اط .Lazy Loadingكى ضـ
قز ثبیس چسی دطؼ ػی ػسا ثیؿی.ثرای ثط ضی چس ضوضز فیبر عب اؼب
: Eager Loadingضـ
ای ضـ ضا ضـ ثبضعاضی كشبلب ی یس.
: ) ای وبض زض ضـ ثبضعاضی سج اىب دصیط اؾز (1ظب
$posts=Post::model()->with('author')->findByPk(1);
:2ظب
$posts=Post::model()->with('author')->findAll();
ث عض یىؼب فطاذای وطز. 2ىش : زض ضـ سج ی سا چسیس ضوضز ضا بس ظب
ظب :
$posts=Post::model()->with('author')->findAll();
020
با Postدر ر authorضا ثط ی طزاس ث عضی و فیس Postظب ثبلا ضوضزبیی اظ س
از لبل هرتبط شذ است. Userجذل همذار هعادل آى در
کت : هی تاین همسهاى ام چذ رابط را بیسین
همادیر آنها را ب طر همسهاى بازیابی نمایین. هثال :
$posts=Post::model()->with('author','categories')->findAll();
یف ز :چی ی سا ث نضر یه یؿز اظ اؾبی زض ضاثغ آ ضا سقط
$posts=Post::model()->with(
'author.profile',
'author.posts',
'categories')->findAll();
اؾشفبز بیی : CDbCriteria::withچی ی سای اظ
$criteria=new CDbCriteria;
$criteria->with=array(
'author.profile',
'author.posts',
'categories',
);
$posts=Post::model()->findAll($criteria);
یب :
$posts=Post::model()->findAll(array(
'with'=>array(
'author.profile',
'author.posts',
'categories',
)
);
022
اػطای دطؼ ػ بی ضاثغ ای ثس اؾشفبز اظ س بی زاضی ضاثغ :
وطز اس ب published بیی ضا postبیی ضا دیسا وی و و userث فا ظب ب ی ذای سبی
ر ث قى ظیط ی یؿی :فلال ای ساضی و ثسای ذز دؿز ب چ ؿشس. زض ای نض
$users=User::model()->with(array(
'posts'=>array(
// we don't want to select posts
'select'=>false,
// but want to get only users with published posts
'joinType'=>'INNER JOIN',
'condition'=>'posts.published=1',
),
))->findAll();
دطؼ ػ بی ضاثغ ای : عی بی
سقطیف یه ضاثغ ث قى ظیط غطح قس :
'VarName'=>array('RelationType', 'ClassName', 'ForeignKey',
...additional options)
قى ظیط سقطیف قس : ی ساس ث additional optionsزض آ عی بی اضبفی یب
select: a list of columns to be selected for the related AR class. It defaults to '*',
meaning all columns. Column names referenced in this option should be
disambiguated.
condition: the WHERE clause. It defaults to empty. Column names referenced in this
option should be disambiguated.
params: the parameters to be bound to the generated SQL statement. This should be
given as an array of name-value pairs.
on: the ON clause. The condition specified here will be appended to the joining
condition using the AND operator. Column names referenced in this option should be
disambiguated. This option does not apply to MANY_MANY relations.
order: the ORDER BY clause. It defaults to empty. Column names referenced in this
option should be disambiguated.
with: a list of child related objects that should be loaded together with this object. Be
aware that using this option inappropriately may form an infinite relation loop.
joinType: type of join for this relationship. It defaults to LEFT OUTER JOIN.
alias: the alias for the table associated with this relationship. It defaults to null,
meaning the table alias is the same as the relation name.
029
together: whether the table associated with this relationship should be forced to join
together with the primary table and other tables. This option is only meaningful for
HAS_MANY and MANY_MANY relations. If this option is set false, the table associated with
the HAS_MANY or MANY_MANY relation will be joined with the primary table in a
separate SQL query, which may improve the overall query performance since less
duplicated data is returned. If this option is set true, the associated table will always
be joined with the primary table in a single SQL query, even if the primary table is
paginated. If this option is not set, the associated table will be joined with the primary
table in a single SQL query only when the primary table is not paginated. For more
details, see the section "Relational Query Performance".
join: the extra JOIN clause. It defaults to empty. This option has been available since
version 1.1.3.
group: the GROUP BY clause. It defaults to empty. Column names referenced in this
option should be disambiguated.
having: the HAVING clause. It defaults to empty. Column names referenced in this
option should be disambiguated.
index: the name of the column whose values should be used as keys of the array that
stores related objects. Without setting this option, an related object array would use
zero-based integer index. This option can only be set for HAS_MANY and MANY_MANY
relations.
چی عی بی ظیط ػز ثبضعاضی سج ی ساس اؾشفبز قز :
limit: limit of the rows to be selected. This option does NOT apply to BELONGS_TO
relation.
offset: offset of the rows to be selected. This option does NOT apply to BELONGS_TO
relation.
through: name of the model's relation that will be used as a bridge when getting
related data. Can be set only for HAS_ONE and HAS_MANY. This option has been
available since version 1.1.7.
ظب :
نلاح قس اؾز ثب عی بی اضبفی ا Postزض ظب ظیط ضاثغ
class User extends CActiveRecord
{
public function relations()
{
return array(
'posts'=>array(self::HAS_MANY, 'Post',
'author_id',
'order'=>'posts.create_time DESC',
'with'=>'categories'),
024
'profile'=>array(self::HAS_ONE, 'Profile',
'owner_id'),
);
}
}
ضا ذای authorپست ای دسترسی پیذا کین ها author->posts$حب اط ب ث
زاقز و ثط اؾبؼ ظب ایؼبزقب ث نضر عی طست قس اس.
سىطاضی : ثب ب س بیفی
اط یه فیس ثب ب یىؿب زض چس ػس سىطاض قس ثبقس ثطای ایى سساذ بب دیف یبیس ثبیس آ ب ضا سؾظ ب ػس قبزف
سقطیف وطز و ای وبض اظ سساذ بب ػیطی ی وس. ظب :
$posts=Post::model()->with('comments')->findAll(array(
'order'=>'t.create_time, comments.create_time'
));
عی بی دطؼ ػی ضاثغ ای دیب :
ذبل ضا ثط طزای authorثبلا اط ثرای اظ ضـ ثبضعاضی كشبلب اؾشفبز بیی سب ثشای دؿز بی طسجظ ثب یه userزض س
زض حبی اؾز و زض سقطیف ضاثغ زض س ای سطسیت ث قى عی قطیف ز اؾز( ی و ث عض نقزی طست قس ثبقس ) ای
ی قس: overwriteسای ث قى ظیط ف وی و زض الـ عی بی ػسیس ثط ضی عی بی لجی
User::model()->with(array(
'posts'=>array('order'=>'posts.create_time ASC'),
'profile',
))->findAll();
اؾز ثططزاس 1آ statusای ضـ چی ثطای ثبضعاضی سج یع اؾشفبز ی قز. ظلا زض ظب ظیط دؿز بی وبضثط و مساض
ی قس :
$user=User::model()->findByPk(1);
$posts=$user->posts(array('condition'=>'status=1'));
025
ؼ ػ بی زض ضاثغ : وبضایی دط
بغضی و فش قس ضـ ثبضعاضی كشبلب ظبی فیس اؾز و ثرای چسیس ضوطز زض ضاثغ ضا ث
عض یىؼب ثططزای. اؼب چی وبضی اط ی ساس ثب سقطیف فیشطبیی زض سقطیف ضاثغ زض س یع اؼب
ی ؿشس. ظب :یطز و ط ز ضـ زاضای حبؾ قبیج
ضـ ا )زض سقطیف ضاثغ (
public function relations()
{
return array(
'comments' => array(self::HAS_MANY, 'Comment',
'post_id', 'together'=>false),
);
}
ضـ ز ) زض ذز ضاثغ كشبلب(
$posts = Post::model()-
>with(array('comments'=>array('together'=>false)))->findAll();
دطؼ ػ بی اؾشبسیه :
اضزی بس قبضـ سقساز ضوضزبی ذبل یه ػس زض ضاثغ وبضبیی اظ ای زؾز سؾظ دطؾ ػ
چس لبث -چس چس-1بی اؾشبسیه لبث اؼب اؾز. ای فیبر سب ثط ضی س بی ضاثغ ای ؿ
ؼب اؾز. ظب :ا
class Post extends CActiveRecord
{
public function relations()
{
return array(
'commentCount'=>array(self::STAT, 'Comment',
'post_id'),
'categoryCount'=>array(self::STAT, 'Category',
'post_category(post_id, category_id)'),
);
}
026
}
زض ظب ثبلا ز دطؼ ػی اؾشبسیه ػز زاضس :
commentCount تعذاد :comment ای یکpost .را شمارش هی کذ
categoryCount تعذاد :categories را ک یکpost ب آى تعلك دارذ را هشخض هی
کذ.
تسط دستر زیر دسترسی پیذا postای یک commentن ب با دستر بالا ها هی تای
کین ک یک رش تبل است :
$post->commentCount
چی سؾظ ضـ كشبلب ی سای ث قى ظیط زاقش ثبقی :
$posts=Post::model()->with('commentCount', 'categoryCount')-
>findAll();
ضا COINTه دطؼ ػی اؾشبسیه ف قبضـ سقساز ضوضزب یب ب ىش : ث عض دیف فطو ی
اؼب ی زس.
ب ی سای زض دطؼ ػیب اظ عی بی اضبفی سطی یع اؾشفبز وی و ذلان آ زض ظیط آس اؾز
:
select: the statistical expression. Defaults to COUNT(*), meaning the count of child
objects.
defaultValue: the value to be assigned to those records that do not receive a
statistical query result. For example, if a post does not have any comments, its
commentCount would receive this value. The default value for this option is 0.
condition: the WHERE clause. It defaults to empty.
params: the parameters to be bound to the generated SQL statement. This should be
given as an array of name-value pairs.
order: the ORDER BY clause. It defaults to empty.
group: the GROUP BY clause. It defaults to empty.
having: the HAVING clause. It defaults to empty.
027
Named Scopesپزط ي ج ای رابط ای با
ها به کار روند. این کار named scopesپرس و جو های رابطه ای همچنین می توانند در ترکیب با
ا می شوند ها در مدل اصلی اجر named scopesبه دو شکل انجام می شود. در روش اول
$posts=Post::model()->published()->recently()-
>with('comments')->findAll();
ها در مدل رابطه ای اجرا می شوند. named scopesدر روش دوم
$posts=Post::model()->with('comments:recently:approved')-
>findAll();
// or since 1.1.7
$posts=Post::model()->with(array(
'comments'=>array(
'scopes'=>array('recently','approved')
),
))->findAll();
// or since 1.1.7
$posts=Post::model()->findAll(array(
'with'=>array(
'comments'=>array(
'scopes'=>array('recently','approved')
),
),
));
user->posts$اؾشفبز قس. زض ظب ظیط اط ب ث withب ی ساس ثب Named scopesچی
ضا كب ی زس. postبی طثط ث commentsدسترسی پیذا کین تماهی
class User extends CActiveRecord
{
public function relations()
{
return array(
'posts'=>array(self::HAS_MANY, 'Post',
'author_id',
'with'=>array(
'comments'=>array(
028
'scopes'=>'approved'
),
),
),
);
}
}
بی ضاثغ ای اضؾب بییس. ظلا اط عی named scopesقب چی ی سایس دبضاشطبیی ضا یع ثطای
ػز زاقش ثبقس زاضی : postزض ratedای ث ب
$users=User::model()->findAll(array(
'with'=>array(
'posts'=>array(
'scopes'=>array(
'rated'=>5,
),
),
),
));
throughدطؼ ػ بی ضاثغ ای ثب
ث قى ظیط ی ثبقس : throughاؾشفبز اظ
'relationName'=>array('relationType', 'ClassName',
'foreign_key', 'through'=>'throughRelationName', ...additional
options)
ب ام کلیذی اشار دارد ک : foreign_keyو زض آ
هشخض هی شد throughRelationNameزض ػسی سقطیف قس اؾز و زض -1
ClassNameب جذلی اشذر دارد ک داد ای هذل -2
را در خد گ هی دارد.
Through ثطای ط ز ؿ ضاثغHAS_ONE HAS_MANY هی تاذ ب کار هی
رد.
029
HAS_MANY through
هی تاذ ب دست آردى کاربرای throughبا HAS_MANYظبی اظ
باشذ ک در یک گر لرار دارذ لتی ک کاربراى تسط
role .ایی گر بذی شذ اذ
یک هثال پیچیذ تر ب شکل زیر است :
class Group extends CActiveRecord
{
...
public function relations()
{
return array(
'roles'=>array(self::HAS_MANY,'Role','group_id'),
'users'=>array(self::HAS_MANY,'User','user_id','through'=>'rol
es'),
'comments'=>array(self::HAS_MANY,'Comment','user_id','through'
=>'users'),
);
}
}
091
هثالهای کاربردی :
// get all groups with all corresponding users
$groups=Group::model()->with('users')->findAll();
// get all groups with all corresponding users and roles
$groups=Group::model()->with('roles','users')->findAll();
// get all users and roles where group ID is 1
$group=Group::model()->findByPk(1);
$users=$group->users;
$roles=$group->roles;
// get all comments where group ID is 1
$group=Group::model()->findByPk(1);
$comments=$group->comments;
HAS_ONE through
ب دست آردى آدرش کاربرای throughبا HAS_ONEیک هثال از
آنها تعریف شذ است : profileاست ک آدرش آنها در
class User extends CActiveRecord
{
...
public function relations()
{
return array(
'profile'=>array(self::HAS_ONE,'Profile','user_id'),
'address'=>array(self::HAS_ONE,'Address','profile_id','through
'=>'profile'),
);
}
}
090
هثال کاربردی :
// get address of a user whose ID is 1
$user=User::model()->findByPk(1);
$address=$user->address;
through on self
هثال :
class User extends CActiveRecord
{
...
public function relations()
{
return array(
'mentorships'=>array(self::HAS_MANY,'Mentorship','teacher_id',
'joinType'=>'INNER JOIN'),
'students'=>array(self::HAS_MANY,'User','student_id','through'
=>'mentorships','joinType'=>'INNER JOIN'),
);
}
}
هثال کاربردی :
// get all students taught by teacher whose ID is 1
$teacher=User::model()->findByPk(1);
$students=$teacher->students;
092
کلی پرش ج ای رابط ای حفظ فاطل کت : در شتن
بیي پاراهترای دسترات بسیار هن است.
ماجزات باوک اطلاعاتی
زض ثؿیبضی اظ اضز ى اؾز زض حی اػطای دطغ سغییطی زض ؾبذشبض ثبه اعلافبسی انی ایؼبز قز
ثطای زجب وطز ای ث یه ػس اضبف قز یب یه فیس اظ یه ػس حصف قز indexظلا یه
غطح ی قز. Yiiسغییطار ف بػطر زض
طاح اؼب بػطر :
1. Tim creates a new migration (e.g. create a new table)
2. Tim commits the new migration into source control system (e.g. SVN, GIT)
3. Doug updates from source control system and receives the new migration
4. Doug applies the migration to his local development database
بغ ب وبذز ب
معزفی ماصيل
یه بغ یه وب اظ دطغ اؾز و قب وشطط ب ی ب س ب ؾبیط اػعای یه دطغ وب
ی ثبقس.زؾشطؾی ث بغ :
http://hosname.com/index.php/ModuleID/ControllerID/Action
سفبر بغ ثب یه دطغ القی زض ای اؾز و بغ ث سبیی ی ساس اػطا قز ثبیس حشب زاذ یه
دطغ القی فطاذای قز.
099
ی استفاد اس ماصيل :مشایا
زض دطغ بی ذیی ثعضي و ی سا ط ثرف ضا سحز لبت یه بغ دیبز ؾبظی وطز ط ثرف
سؾظ یه فط ازاض دیبز ؾبظی ی قز. دؽ لبثیز وبض سیی ضا افعایف ی زس.چی ی سا اظ
عایف لبثیز اؾشفبز ؼسز ی قز.یه یه بغ ؾبذش قس زض چسی دطغ اؾشفبز وطز و ثبفض اف
بغ ی ساس قب وی وشططب، یب، س ب ؾبیط اػعای ثه دطغ القی ثبقس.ذیی اظ اػعای
ثطب ظ سیطیز حؿبثب، سیطیز دیبب، فط ؾبیز، ثلاي ؾبیز ... ضا ی سا زض لبت یه بغ
زض زیط دطغ بی ی سا اظ آب اؾشفبز ز.دیبز ؾبظی ز سب زض آیس
: ساخت یک ماصيل جذیذ
اضص ثطی ی وس. CWebModuleیه بغ ثبیس قب یه ولاؼ بغ ثبقس و اظ ولاؼ
با id$استفاد هی کذ ه در آى 'ucfirst($id).'Moduleب ولاؼ بغ اظ لبت
ModuleID اشار دارد. کلاش هاژل محلی برای رخیر اطلاعاتی است ک در کل هاژل
هشترکا هرد استفاد لرار هی گیرد.
ثطای شذیط دبضاشطبی ضز CWebModule::paramsب عاى هثال ها هی تاین از
ثطای اقشطان CWebModule::componentsاؾشفبز زض بغ اؾشفبز وطز. چی ی سا اظ
زض ؾغح بغ اؾشفبز وطز.ثطای ؾبذز بغ ػسیس ی سا اظ application componentsصاضی
اؾشفبز ز. yiicاثعاض command lineاؾشفبز ز یب اظ giiػز زض module generatorاثعاض
ث قى ظیط ی ثبقس: forumدق بی ایؼبز قس ثطای بغ ؾبذشبض فبیب
forum/
ForumModule.php the module class file
components/ containing reusable user components
views/ containing view files for widgets
controllers/ containing controller class files
DefaultController.php the default controller class file
extensions/ containing third-party extensions
models/ containing model class files
094
views/ containing controller view and layout files
layouts/ containing layout view files
default/ containing view files for DefaultController
index.php the index view file
وح استفاد اس ماصيل
لطاض زاز . ؾذؽ ثبیس زض فبی protected\models\ ضا زض ثطای اؾشفبز اظ بغ اثشسا ثبیس دق بغ
config بغ ػز ضا افلا ز. ث فا ظب ثطای فطاذای بغforum ثبلا ثبیس زض فبی
config : مبزیط ظیط ضا اضز وطز
returnarray(
......
'modules'=>array('forum',...),
......
);
ای یه بغ:ح فطاذ
http://www.example.com/index.php?r=forum/post/create
یه بغ ی ساس قب بغ بی زاذی یع ثبقس. یه یب چس بغ زاذ یه بغ زیط لطاض یطز
بغ زاذی ث قى ظیط ی ثبقس:و ح زؾشطؾی ث آ
ParentModuleID/childModuleID/controllerID/actionID
معزفی کامپوىت ا
اؾشفبز ی وس. Components اظ loginؾبز طفش سب request اػعای ثطب اظ یه
: Componentوح دستزسی ب یک
Pattern : Yii::app()->ControllerId
Sample: Yii::app()->cahche
ذاس ثز. NULLاىب دصیط ثبقس مساض ثطكشی Componentاط زؾشطؾی ث یه
095
Component ب فمظ ظبی زض ثطب ؾبذش ی قس و ث آب یبظ ثبقس طچس زض ثطب ى
ضا افعایف Yiiای وبضایی سقطیف قس ثبقس. ای ؿئ ث عض لبث لاحؾ Componentاؾز چسی
ی زس.
: Componentاواع
Core Application ComponentYiis
User Defined Component
ث عض دیف فطو ب فبی ولاؼ ثب ب ذز ولاؼ یىؿب اؾز.
اىب دصیط اؾز. aliasح زؾشطؾی ث یه ولاؼ اظ عطیك
یب ولاؼ بی كشك آ ؾبذش ی قز. CComponentاظ ولاؼ Componentط
اػعای وبذز
,Property, Behaviorsث عض وی یه وبذز بس ط ولاؼ زیطی ی ساس قب اػعای
Event .ثبقس
قس. اظ سقطیف ولاؼ ضیساز ...ػز ی ثب PHPوی وسب طثع زض ضابی قی طایی
یک کامپوىت اس ياستفاد تعزیف
ی سا ث قى ظیط ف وطز : componentثطای اؾشفبز اظ یه
componentؾبذز
قی یه فبی ولاؼ C:\xampp\htdocs\demo\protected\controllersاثشسا ثبیس اضز دق
ایؼبز بیی :
ایؼبز ی بیی. ثبیس سػ وطز و ب ولاؼ ثجب ب فبی ثبیس یىی ثبقس demo.phpفبیی ث ب
حشای ولاؼ ضا ث قى ظیط اضز ی وی :
<?php
class demo
{
public function fun1()
096
{
return 1;
}
}
?>
ح اؾشفبز اظ آ ی ساس ث قى حب ظلا ی ذای زض وشططب اظ ای ولاؼ اؾشفبز بیی و
ظیط ثبقس و ثب اؾشفبز اظ ؾبظی اؼب ی قز :
$class1 = new demo();
echo $class1->fun1();
زض ذطػی ی قز. 1ای وبض ثبفض بیف
ؾبیط وشطط ب ضا یع ی سا ث ی قى ایؼبز وطز.
ؾبذش یع ث قى ظیط اؾز : ضـ زؾشطؾی ؿشمی ث ولاؼ ثس
echo Demo::fun1();
کامپوىت ای پیص فزض
ث عض دیف فطو سقطیف قس ؿشس: .CWebApplicationوبذز بی ظیط سؾظ
assetManager: CAssetManager - manages the publishing of private asset files.
authManager: CAuthManager - manages role-based access control (RBAC).
cache: CCache - provides data caching functionality. Note, you must specify the
actual class (e.g. CMemCache, CDbCache). Otherwise, null will be returned
when you access this component.
clientScript: CClientScript - manages client scripts (javascripts and CSS).
coreMessages: CPhpMessageSource - provides translated core messages used
by Yii framework.
db: CDbConnection - provides the database connection. Note, you must
configure its connectionString property in order to use this component.
errorHandler: CErrorHandler - handles uncaught PHP errors and exceptions.
format: CFormatter - formats data values for display purpose. This has been
available since version 1.1.0.
097
messages: CPhpMessageSource - provides translated messages used by Yii
application.
request: CHttpRequest - provides information related with user requests.
securityManager: CSecurityManager - provides security-related services, such
as hashing, encryption.
session: CHttpSession - provides session-related functionalities.
statePersister: CStatePersister - provides global state persistence method.
urlManager: CUrlManager - provides URL parsing and creation functionality.
user: CWebUser - represents the identity information of the current user.
themeManager: CThemeManager - manages themes.
یز وبضثط حسز زؾشطؾیسكریم
ازبم هی ؽد کلی اعلاػبت کبسثش هخل بم کبسثش، CWebUserتؾخیـ یت کبسثش تعظ کلاط
ب ث ؽکل صیش sessionبیی رخیش هی کذ. ض دعتشعی ث ایي Sessionضؼیت کبسثش ... سا دس
هی ثبؽذ :
Yii::app()->user
خاذ ؽد کذ صیش سا داسی : MySQLص ثبک اعلاػبتی ثشای ایک هؾخقبت کبسثش ا
<?php
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$record=TblUser::model()-
>findByAttributes(array('username'=>$this->username));
if($record===null)
098
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($record->password!==($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$record->id;
$this->setState('id', $record->id);
$this->setState('group', $record->group);
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}
?>
چس ىش :
اضز قس ثبقس. TblUserب س ثبیس ظ
ثبقس. username passwordای ػس ثبیس زاضای فیس
شذیط وی زض ع ثطب اظ آب اؾشفبز وی Sessionی سا مبزیطی ضا زض ی اثشسا ث نضر
ی ث آب زض ثطب ظ وس ظیط اؾز :زض ظب ثبلا. و ح زؾشطؾ id groupظ
echo Yii::app()->user->id;
echo Yii::app()->user->group;
099
معرفی فرم ىا
فشم ب رت دسیبفت اعلاػبت کبسثش اص سدی هسد اعتفبد لشاس هی گیشذ دس پؽ ی ب رخیش
هی ؽذ.
نحه ایجاد فرم جذیذ
ث عس خدکبس فشم بی الی سا ایزبد هی کذ. giiشم رد داسد ک اثضاس چذیي سػ ثشای ایزبد ف
giiهسد اعتفبد تعظ –سػ ال : عبد تشیي سػ
<div class="form">
<?php echo CHtml::beginForm(); ?>
<?php echo CHtml::errorSummary($model); ?>
<div class="row">
<?php echo CHtml::activeLabel($model,'username'); ?>
<?php echo CHtml::activeTextField($model,'username') ?>
</div>
<div class="row">
<?php echo CHtml::activeLabel($model,'password'); ?>
<?php echo CHtml::activePasswordField($model,'password') ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('Login'); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
اعتفبد ؽذ اعت. form کلاعبی هجط ث blueprintبی فشم اص cssثشای تؼییي
CActiveFormسػ دم : اعتفبد اص یزت
<div class="form">
<?php $form=$this->beginWidget('CActiveForm'); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->label($model,'username'); ?>
<?php echo $form->textField($model,'username') ?>
041
</div>
<div class="row">
<?php echo $form->label($model,'password'); ?>
<?php echo $form->passwordField($model,'password') ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('Login'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
Form Builderسػ عم : اعتفبد اص
ث ػاى رذیذ Form Builderاص آزبیی ک سؽبی لجلی ثبػج ؽتي کذبی صیبد هی ؽد سػ
یغی عبد تش کوتش اعت هسد اعتفبد لشاس هی گیشد.تشیي سػ ک سؽی ثشای کذ
یک فرم چنذ مذل :
گبی لاصم اعت اعلاػبت هشثط ث چذ هذل اص عشیك یک فشم دسیبفت اسعبل ؽد ک ث آى سػ
Tabular Input گفت هی ؽد. ثشای اعتفبد اص ایي سػ دس کتشلش اثتذا اکؾي سا ث ؽکل صیش تؼشیف
فلاس هی وبیین :یب ا
public function actionBatchUpdate()
{
// retrieve items to be updated in a batch mode
// assuming each item is of model class 'Item'
$items=$this->getItemsToUpdate();
if(isset($_POST['Item']))
{
$valid=true;
foreach($items as $i=>$item)
{
if(isset($_POST['Item'][$i]))
$item->attributes=$_POST['Item'][$i];
$valid=$item->validate() && $valid;
}
if($valid) // all items are valid
// ...do something here
}
040
// displays the view to collect tabular input
$this->render('batchUpdate',array('items'=>$items));
}
صبل فشم هسد ظش سا ث ؽکل صیش تؼشیف هی کین :
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Name</th><th>Price</th><th>Count</th><th>Description</
th></tr>
<?php foreach($items as $i=>$item): ?>
<tr>
<td><?php echo CHtml::activeTextField($item,"[$i]name");
?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price");
?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]count");
?></td>
<td><?php echo CHtml::activeTextArea($item,"[$i]description");
?></td>
</tr>
<?php endforeach; ?>
</table>
<?php echo CHtml::submitButton('Save'); ?>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
اعتفبد هی کین. name[i$]اص nameتر کیذ ک هب دس ایي هخبل ث ربی کت :
042
Caching
cachingهؼشفی
کؼ کشدى سای اعت ثشای افضایؼ ثبصدی عبیتبی ایتشتی تعظ رخیش هلت داد بی
هی ؽذ. اعتبتیک ک ث عس هکشس هسد اعتفبد لشاس هی گیشذ. ایي داد ب دس بگب کؼ رخیش
کؼ سا اضبف کشد. هخبل : componentتظیوبت هشثط ث configثشای ؽشع کبس ثبیذ دس فبیل
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'system.caching.CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
);
رت رخیش اعلاػبت هسد اعتفبد لشاس هی گیشد. Server1 Server2ایي هخبل اص د عشس
شعی هی تاى ث هضتیبت صبفظ بگب دعت via Yii::app()->cacheدس گبم ارشای ثشبه تعظ
پیذا کشد.
کبهپت بی هختلفی رت کبس ثب کؼ آهبد ؽذ اعت ک دس صیش تضیش هختقش ش کذام سا Yiiدس
هی ثیین :
CMemCache: uses PHP memcache extension.
CApcCache: uses PHP APC extension.
CXCache: uses PHP XCache extension. Note, this has been available since version 1.0.1.
CEAcceleratorCache: uses PHP EAccelerator extension.
CDbCache: uses a database table to store cached data. By default, it will create and use a SQLite3 database under the runtime directory. You can explicitly specify a database for it to use by setting its connectionID property.
CZendDataCache: uses Zend Data Cache as the underlying caching medium. Note, this has been available since version 1.0.4.
CFileCache: uses files to store cached data. This is particular suitable to cache large chunk of data (such as pages). Note that this has been available since version 1.0.6.
CDummyCache: presents dummy cache that does no caching at all. The purpose of this component is to simplify the code that needs to check the availability of cache. For example, during development or if the server doesn't have actual cache support, we can use this cache component.
049
When an actual cache support is enabled, we can switch to use the corresponding cache component. In both cases, we can use the same code Yii::app()->cache->get($key) to attempt retrieving a piece of data without worrying that Yii::app()->cache might be null. This component has been available since version 1.0.5.
اسث ثشی هی کذ. CCacheکلی کبهپت بی فق اص کلاط
کؼ کشدى دس عغس هختلفی لبثل ازبم اعت :
dataپبییي تشیي عغش رخیش یک داد عبد هخل هضتای یک هتغیش عبد اعت ک ث آى -0
caching یند.می گو
عغش هتعظ هشثط ث رخیش یک فشین یب یک لغوت اص ففض دس لبلت یک ی اعت ک ث -2
هی گیذ.Fragment cachingآى
ثبلاتشیي عغش هشثط ث رخیش یک ففض کبهل اعت. -9
ب اعتفبد کشد صیشا صبفظ بى Sessionکت : جبیذ اص صبفظ کؼ ثشای رخیش داد بی هن هخل
هلت ب هغوئي اعت. یک هضل
Data Caching
هی data cachingپبییي تشیي عغش رخیش یک داد عبد هخل هضتای یک هتغیش عبد اعت ک ث آى
ک الذ ثمی کبهپت بی کؼ اعت اص د هتذ هن پؾتیجبی هی کذ Ccache. کلاط پبی گیذ
هی ثبؽذ. get setایي د هتذ
آى سا دس setیکتب سا دس ظش هی گیشین تعظ هتذ IDهب اثتذا یک در حافظ نهاى value$ثشای رخیش
صبفظ بى دخیش هی کین . هخبل :
Yii::app()->cache->set($id, $value);
داد ب دس صبفظ بى ثبلی هی هبذ تب صهبی ک ثش احش یک عیبعت کؼ هخل صزف کؼ یب پش
ؽذ وچیي هی تاى صهبی سا هؾخـ کشد ک پظ اص گزؽت آى صهبى ؽذى کؼ اعلاػبت صزف
اعلاػبت کؼ پبک هی ؽذ. ایي صهبى ثشصغت حبی اعت.هخبل :
// keep the value in cache for at most 30 seconds
Yii::app()->cache->set($id, $value, 30);
اعتفبد هی کین. id$آى داد دس کؼ یؼی ؽبع یکتبیgetثشای ثبصگشداذى اعلاػبت اص هتذ
ثبؽذ یؼی آى داد دس falseاعلاػبت کؼ سا هی تاى دس یک هتغیش ثبصیبثی کشد. اگش همذاس ثشگؾتی
صبفظ کؼ رد ذاسد. هخبلی اص ثبصیبثی داد ب ث ؽکل صیش اعت :
$value=Yii::app()->cache->get($id);
if($value===false)
{
// regenerate $value because it is not found in cache
044
// and save it in cache for later use:
// Yii::app()->cache->set($id,$value);
}
دس توبهی ثشبه بیی )عبیت ب id$ثبیذ واس یکتب ثبؽذ. الجت یبصی یغت ک id$کت :
غتن کؼ ث اذاص کبفی ؽوذ ػول هی کذ ک ففضبت( ک ثبص غتذ یکتب ثبؽذ صیشا عی
تؾخیـ دذ اص کذام همبدیش دس کؼ اعتفبد کذ.
ثشای صزف کبهل صبفظ کؼ اعتفبد هی کین. ()deleteثشای صزف یک همذاس اص صبفظ بى اص هتذ
اعتفبد هی ؽد گبم اعتفبد اص ایي هتذ ثبیذ هاظت ثب ؽین صیشا ایي هتذ کلی داد ()flushتذ اص ه
بی هرد دس کؼ اص رول داد بی هشثط ث ثشبه بی دیگش سا یض صزف هی کذ.
اعتفبد هی کذ لزا هیتاى ث ؽکل صیش یض ث هضتیبت آى ArrayAccessاص Ccacheاص آزبیی ک
دعتشعی پیذا کشد :
$cache=Yii::app()->cache;
$cache['var1']=$value1; // equivalent to: $cache->set('var1',$value1);
$value2=$cache['var2']; // equivalent to: $value2=$cache->get('var2');
اثغتگی کؼ
فشك کین ثخاین هضتیبت یک فبیل سا کؼ کین صبل اگش هضتیبت فبیل ثشای ثبس ال دس کؼ لشاس
گیشد عپظ هضتیبت فبیل تغییش کذ دیگش وی تاى ث داد بی هرد دس کؼ اعویبى کشد ثشای
لاط اعتفبد هی کین. هخبل : یب فشصذاى ایي ک CcacheDependencyسفغ ایي هؾکل اص کلاط
// the value will expire in 30 seconds
// it may also be invalidated earlier if the dependent file is changed
Yii::app()->cache->set($id, $value, 30, newCFileCacheDependency('FileName'));
اعلاػبت کؼ سا ثبصیبثی کشد ثب ایي تفبت ک اگش getصبل ث وبى سػ لجلی هی تاى تعظ هتذ
هضتیبت افلی تغییش کذ هضتیبت کؼ یض تغییش پیذا هی کذ.
سا هلاصظ هی کیذ : dependencyدس صیش خلاف سؽبی کبس ثب
CFileCacheDependency: the dependency is changed if the file's last modification time is changed.
CDirectoryCacheDependency: the dependency is changed if any of the files under the directory and its subdirectories is changed.
CDbCacheDependency: the dependency is changed if the query result of the specified SQL statement is changed.
CGlobalStateCacheDependency: the dependency is changed if the value of the specified global state is changed. A global state is a variable that is persistent across multiple requests and multiple sessions in an application. It is defined via CApplication::setGlobalState().
CChainedCacheDependency: the dependency is changed if any of the dependencies on the chain is changed.
045
CExpressionDependency: the dependency is changed if the result of the specified PHP expression is changed. This class has been available since version 1.0.4.
Fragment caching
ثشای رخیش یک فشین اص داد ب هخلا گضاسػ عبلیب اص آهبس اؽبعی ... هی تاى اص ایي سػ
اعتفبد کشد. هخبل :
...otherHTMLcontent...
<?phpif($this->beginCache($id)){?>
...content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
گضی بی کؼ :
تؼییي هذت صهبى لشاس گیشی داد ب دس کؼ
...otherHTMLcontent...
<?phpif($this->beginCache($id, array('duration'=>3600))){?>
...content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
حبی 61هی ثبؽذ یؼی ثؼذ اص 61کت : اگش هذت صهبى هؾخـ ؾذ ثبؽذ ث فست پیؼ فشك
هضتیبت آى پبک هی ؽذ.
اثغتگی داد ب :
یض fragment cachingهی تاى اثغتگی داد ب سا دس data cachingوبذ اثغتگی داد ب دس
د. هخبل :هؾخـ و
...otherHTMLcontent...
<?phpif($this->beginCache($id, array('dependency'=>array(
'class'=>'system.caching.dependencies.CDbCacheDependency',
'sql'=>'SELECT MAX(lastModified) FROM Post')))){?>
...content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
تع داد ب :
دس ثؼضی اص هاسد هوکي اعت ثخاین کؼ کشدى داد ب سا ث گ ای ازبم دین ک تفبت داد
یکتب کبسثشاى اص ن IDب دس یک یب چذ فبکتس هؾخـ گشدد هخلا دس رخیش پشفبیل کبسثش داد ب تعظ
046
هؾخـ کشد. ااع صبلتبی آى BeginCacheع داد سا دس گبم هتوبیض هی ؽذ ک هی تاى آى ت
ث ؽکل صیش اعت :
varyByRoute: by setting this option to true, the cached content will be variated according to route. Therefore, each combination of the requested controller and action will have a separate cached content.
varyBySession: by setting this option to true, we can make the cached content to be variated according to session IDs. Therefore, each user session may see different content and they are all served from cache.
varyByParam: by setting this option to an array of names, we can make the cached content to be variated according to the values of the specified GET parameters. For example, if a page displays the content of a post according to the id GET parameter, we can specify varyByParam to be array('id') so that we can cache the content for each post. Without such variation, we would only be able to cache a single post.
varyByExpression: by setting this option to a PHP expression, we can make the cached content to be variated according to the result of this PHP expression. This option has been available since version 1.0.4.
دسخاعت ع :
اعت GETاعت یب اص ع POSTهی تاى هؾخـ ود ک چ ع داد ای کؼ گشدد هخلا فشهی ک اص ع
کؼ گشدد. هخبل :
...otherHTMLcontent...
<?phpif($this->beginCache($id, array('requestTypes'=>array('GET')))){?>
...content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
ت دس ت : کشدى کؼ
هی تاى کؼ کشدى سا ث فست ت دس ت هؾخـ کشد. هخبل :
...otherHTMLcontent...
<?phpif($this->beginCache($id1)){?>
...outer content to be cached...
<?phpif($this->beginCache($id2)){?>
...inner content to be cached...
<?php$this->endCache(); }?>
...outer content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
047
Page Caching
شای کؼ کشدى یک ففض ث عس کبهل هی تاى اص اکؾي فیلتش اعتفبد کشد. هخبل :ث
publicfunctionfilters()
{
returnarray(
array(
'COutputCache',
'duration'=>100,
'varyByParam'=>array('id'),
),
);
}
اسث CfilterWidgetصیشا ایي کبهپت اص ث ػاى یک فیلتش اعتفبد کین CoutputCacheکت : هب هی تاین اص
ن یک فیلتش اعت ن یک یگت. CoutputCacheثشی هی کذ. ایي یؼی ایک
هضتای پیب :
سا دس ظش ثگیشیذ ک کلی Helpکؼ کشدى هضتا هؼولا رت داد بی اعتبتیک ازبم هی ؽد هخلا یک ففض
اعت کبسثش ثب بم کبسثشی اسد ؽذ ثبؽذ ک دس ایي فست کلی هضتای هضتای آى اعتبتیک اعت الجت هوکي
ایي ففض اعتبتیک اعت ث رض بم کبسثشی ک هتغیش اعت ش کبسثشی ک اسد ؽد بم کبسثشی ا سا هی
یغذ. صبل ثشای کؼ کشدى ایي ففض ث د سػ هی تاى ػول کشد:
هزضا کؼ کشدى رذاگب آب. fragmentسػ ال : تمغین کشدى ففض ث چذ
سػ دم : اعتفبد اص هضتای پثب )سػ ثتش(
سا ش رب ک ثخاین فشاخای هی کین. CController::renderDynamicدس سػ هضتای پیب هب
...otherHTMLcontent...
<?phpif($this->beginCache($id)){?>
...fragment content to be cached...
<?php$this->renderDynamic($callback); ?>
...fragment content to be cached...
<?php$this->endCache(); }?>
...otherHTMLcontent...
هؼتجش اؽبس داسد ک آى هی تاى یک سؽت ثبؽذ ک ث بم یک PHP callbackب callback$دس هخبل ثبلا
ؽبس داسد. ایي وچیي هی تاذ ث آسای ای اؽبس کذ کج هتذ کلاط اؽبس داسد. هتذ دس کلاط کتشلش ربسی ا
ثبیذ هضتای پیب سا ثشگشداذ ث Callbackاسعبل هی ؽد. callbackث renderDynamicش پبساهتش اضبفی دس
ربی آى ک آى سا ؾبى دذ.
048
Yiiبی تعؼ
معرفی تسعو ىا :
یب وبى extensionؽد ک ثؼذا ثتاى اص آى دس ربی دیگش اعتفبد کشد ث آى کذ یک اگش ش کذی ؽت
یک تعؼ هی تاذ ث یکی اص اؽکبل صیش ثبؽذ :.هی گیذ تعؼ
application component behavior widget controller action filter console command validator: a validator is a component class extending CValidator. helper: a helper is a class with only static methods. It is like global functions
using the class name as their namespace. module: a module is a self-contained software unit that consists of models,
views, controllers and other supporting components. In many aspects, a module resembles to an application. The main difference is that a module is inside an application. For example, we could have a module that provides user management functionalities.
وچیي ش کبهپت دیگشی ک ؽت ؽذ ثبؽذ ثتاى اص آى دس ثشبه اعتفبد کشد هی تاذ دس
تؼشیف فق لشاس گیشد.
اعتفبد اص تعؼ ب :
اعتفبد اص تعؼ ب هؼولا دس ع هشصل صیش ازبم هی گیش :
(http://www.yiiframework.com/extensionsدالد یب دسیبفت تعؼ )اص آدسط -0
دس آى ب تعؼ xyzک extensions/xyzاص صبلت فؾشد خبسد کشدى ثغت تعؼ دس هغیش -2
اعت.
9- Import .کشدى تظین کشدى تعؼ دس پشژ اعتفبد اص آى
یوبت ض اعتفبد هتفبت غتذ. دس صیش ث چذ و اص هوتشیي تعؼ بی هختلف داسای تظ
آب اؽبس هی کین.
Zii Extensions
هی ثبؽذ ک ث فست پی فشك دس فشین سک رد yiiثشخی اص تعؼ ب هشثط ث خد پذیذ آسذگبى
ذ. ض فشاخای ایي تعؼ ب گفت هی ؽد دس پؽ ای ثب ویي بم لشاس داس ziiداسذ ث آب
CGridViewاست. هثلا اگر بخاین تسع zii.path.to.ClassNameدس پشژ ث عیل
را در پرژ[ استفاد نمایین ب شکل زیر عول هل کین :
049
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
));
Application Component
سا تظین وبیین ک application configurationاثتذا ثبیذ application componentثشای اعتفبد اص یک
ایي کبس ث ؽکل صیش ازبم هی ؽد :
returnarray(
// 'preload'=>array('xyz',...),
'components'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other component configurations
),
);
هی تاى ب آى دسترسی پیذا کرد. Yii::app()->xyzعپظ دس ش کزبی ثشبه تعظ
هی ثبؽذ. یؼی تب صهبی عبخت خاذ ؽذ ک ث lazily createdایي کاهپت ب طرت
تعریف کرد باشین ک در ایي طرت preloadذا کین هگش ایک آى سا ث فست آى یبص پی
در گام اجرای براه ساخت هی شد.
Behavior
Behavior ب دس ش ع اص کبهپت لبثل اعتفبد هی ثبؽذ. اعتفبد اصbehavior دس د هشصل ازبم
behaviorت الضبق داد هی ؽد دس هشصل دم ث یک کبهپ behaviorهی ؽد. دس هشصل ال
تعظ آى کبهپت فشاخای هی ؽد. ث ػاى هخبل :
// $name uniquely identifies the behavior in the component
$component->attachBehavior($name,$behavior);
// test() is a method of $behavior
$component->test();
را ب behaviorهستمیوا attachBehavioچیي هی تاى ب جای استفاد از هم
کاهپت الحاق نمد. هثال :
returnarray(
051
'components'=>array(
'db'=>array(
'class'=>'CDbConnection',
'behaviors'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzBehavior',
'property1'=>'value1',
'property2'=>'value2',
),
),
),
//....
),
);
الضبق داد ؽذ اعت. ایي کبس لبثل db application componentث xyz behaviorدر هثال بالا
اعت. behaviorsداسای یک خبفیت ث بم CApplicationComponentازبم اعت صیشا ک
ک اغلت یبص ث افضدى تعؼ ب داسذ CController, CFormModel CActiveRecordثشای کلاعبی
آنها لابل انجام است کلاش ب ()behaviorsکضدى هتذ overrideالضبق تعؼ تعظ
ای لازم را الحاق هی کذ. هثال : behaviorطرت خدکار کلی
publicfunctionbehaviors()
{
returnarray(
'xyz'=>array(
'class'=>'ext.xyz.XyzBehavior',
'property1'=>'value1',
'property2'=>'value2',
),
);
}
Widget
xyz extensionهتعلك ب XyzClassیگت ب هؼولا دس ی ب ث کبس هی سذ. کلاط یگت
داد شذ است ک ها هی تاین آى را در ی ب شکل زیر ب کار ببرین :
// widget that does not need body content
<?php$this->widget('ext.xyz.XyzClass', array(
'property1'=>'value1',
'property2'=>'value2')); ?>
// widget that can contain body content
050
<?php$this->beginWidget('ext.xyz.XyzClass', array(
'property1'=>'value1',
'property2'=>'value2')); ?>
...bodycontentofthewidget...
<?php$this->endWidget(); ?>
Action
اکؾي ب دس کتشلش ب ث کبس هی سذ تب ث یک دسخاعت کبسثش اکؼ ؾبى دذ. کلاط اکؾي
XyzClass هتعلك بxyz extension داد شذ است در کلاش کترلر هاى هی تاین
ب آى دسترسی پیذا کین. هثال : CController::actionsکردى overrideتسط
classTestControllerextendsCController
{
publicfunctionactions()
{
returnarray(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other actions
);
}
}
لابل استفاد دسترسی است. test/xyzسط حال ایي اکشي ت
Filter
XyzClassکلاط فیلتش فیلتر ا ن تسط کترلر هرد استفاد لرار هی گیرذ.
داد شذ است.در کلاش کترلر هاى هی تاین تسط xyz extensionهتعلك ب
override کردىCController::filters : ب آى دسترسی پیذا کین. هثال
classTestControllerextendsCController
{
publicfunctionfilters()
{
returnarray(
array(
052
'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other filters
);
}
}
Controller
کتشلش ثبیذ خبفیت یک کتشلش ؽبهل تؼذادی اص اکؾي ب هی ثبؽذ. ثشای اعتفبد اص یک تعؼ
CWebApplication::controllerMap سا دسapplication configuration: : تظین وبیین
returnarray(
'controllerMap'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other controllers
),
);
لابل دسترسی است. xyz/aتسط aحال یک اکشي هاذ
Validator
ثب validatorعوها در کلاش هذل هرد استفاد لرار هی گیرد کلاش Validatorیک
کردى هتذ overrideداد شذ است ها هی تاین تسط XyzClassبم
CModel::rules : در کلاش هذل ب آى دسترسی پیذا کین. هثال
classMyModelextendsCActiveRecord// or CFormModel
{
publicfunctionrules()
{
returnarray(
array(
'attr1, attr2',
'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
059
),
// other validation rules
);
}
}
Console Command
ب کار هی رد. یک yiic کوک ب دستر یک دستر خط فرهاى جت بهبد
داد شذ است ها هی xyzهتؼلك ث تعؼ XyzClassدستر خط فرهاى با عاى
دعتشعی پیذا کین . console applicationتاین ب آى از طریك تظیوات هربط ب
هخبل :
returnarray(
'commandMap'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other commands
),
);
استفاد کرد. xyz با دستر کوکی yiicصبل هی تاى اص
هتفات ک در آدرش configکت : تظیوات هربط ب خط فرهاى در یک فایل
protected/config/console.php دارذ ک با هجد هی باشذ لرارconfig اطلی
پرژ هتفات است.
Generic Component
ثبیذ آى کلاط سا ث ؽکل صیش دس پشژ اسد کین : Genericلجل اص اعتفبد اص یک کبهپت
Yii::import('ext.xyz.XyzClass');
اص آى صبل هی تاین یک و اص سی آى کلاط یب کلاعبی فشصذ آى عبخت )عبخت ؽی(
اعتفبد کین.
054
ایزبد تعؼ ب
کبتی ثشای ایزبد تعؼ رذیذ :
یک تعؼ رذیذ ثبیذ صذالل اثغتگی ث هبثغ دیگش سا داؽت ثبؽذ. -
کلی فبیلب پؽ بی هشثط ث یک تعؼ ثبیذ داخل یک پؽ افلی ثب بم تعؼ ثبؽذ. -
ؽذ تب اص تذاخل بهب ثب کلاعبی افلی کلاعبی یک تعؼ ثبیذ ثب یک پیؼ بم ؽشع -
ثشبه رلگیشی ؽد.
تضیضبت کذب ثبیذ ربهغ کبفی ثبؽذ تب اگش فشد دیگشی خاعت آى سا تغییش دذ یب ث سص -
سعبی کذ ثتاذ.
و غیره BSD, MITیک تعؼ هی تاذ تضت یک لیغبظ لشاس گیشد هخل لیغبظ -
عبخت تعؼ بی گبگى :
Application Component
اسث ثشی کذ یب اص کلاط IapplicationComponentیک کبهپت اص ایي ع هی تاذ اص
CApplicationComponent .اسث ثشی وبیذ
ک هتذ الی اعت تظیوبت هی ثبؽذ. IApplicationComponent::initهتذ افلی هسد یبص ثشای آى
سد. اثتذایی دس آى لشاس دا
Behavior
ث عس پیؼ فشك یک کلاط پبی ثب بم Yiiلی ارث بری نماید Ibehaviorثشای عبخت آى هی تاى اص
CBehavior.تؼشیف کشد اعت ک کلی هاسد هسد یبص سا دس خد داسد
هخبل :
classTimestampBehaviorextendsCActiveRecordBehavior
{
publicfunctionbeforeSave($event)
{
if($this->owner->isNewRecord)
$this->owner->create_time=time();
else
$this->owner->update_time=time();
}
}
Widget
یک هخبل اص اسث ثشی اص صیش کلاعب یب صیش کلاعبی آى اسث یشی هی کذ. CWidgetیک یگت اص کلاط
هبذ :
classMyTabViewextendsCTabView
055
{
publicfunctioninit()
{
if($this->cssFile===null)
{
$file=dirname(__FILE__).DIRECTORY_SEPARATOR.'tabview.css';
$this->cssFile=Yii::app()->getAssetManager()->publish($file);
}
parent::init();
}
}
یب عبخت یک یگت کبهلا رذیذ هخل :
classMyWidgetextendsCWidget
{
protectedfunctionregisterClientScript()
{
// ...publish CSS or JavaScript file here...
$cs=Yii::app()->clientScript;
$cs->registerCssFile($cssFile);
$cs->registerScriptFile($jsFile);
}
}
زض ػبی ذز سضیح زاز قس اس. ىش : ؾبیط سؾق ب بس اوك ب ، فیشط ب ، وشططب ...
3rd-Partyاعتفبد اص کتبثخب بی
Zend Frameworkهشثط ث کتبثخب Zend_Search_Luceneدس صیش هخبلی اص ض اعتفبد اص کبهپت
سا هسد ثشسعی لشاس هی دین. Yiiدس
از حالت protected/vendors/Zend/Searchاثتذا تعؼ هسد ظش سا دسیبفت کشد آى سا دس هغیش
در ایي پش لرار Lucene.phpفشرد خارج هی کین. تج کیذ بایذ حتوا فایل
داشت باشذ.
دس هشصل ثؼذی ثبیذ دس اثتبی یک فبیل کلاط کتشلش کذبی صیش سا هی یغین :
Yii::import('application.vendors.*');
require_once('Zend/Search/Lucene.php');
هی کذ. importرا در براه Lucene.phpکذبی ثبلا فبیل
پظ اص ازبم هشصل فق هی تاى تعظ کذ صیش دس یک اکؾي اص تعؼ هسد ظش اعتفبد کشد :
056
$lucene=newZend_Search_Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));
تغت
تست : اناع رش
0- unit testing ثشسعی هی کذ ک آیب یک اصذ کذ ث دسعتی ػول هی کذ یب خیش. دس ثشبه :
یغی ؽی گشا یک اصذ هؼولا ث یک کلاط اعلاق هی ؽد. اص ایي سػ تغت هؼولا
کغبی اعتفبد هی کذ ک کلاط ب سا ایزبد هی کذ.
2- functional testing ب یک ثخؼ اص ثشبه )هخلا لغوت اسعبل پغت : ثشسعی هی کذ ک ای
ب دس ثلاگ( ث دسعتی ػول هی کذ یب خیش. اص ایي سػ هؼولا تعؼ دذگبى پشژ
اعتفبد هی کذ.
test-driven development (TDD)
ث ؽکل صیش اعت : TDDهشاصل
عی ایک آیب ثب خغب ایزبد یک تغت رذیذ ثشای یک یژگی اص ثشبه. ارشای ایي تغت ثشس -0
هار هی ؽد یب خیش.
ارشای وگی تغت ب ثشسعی ایک آیب تغت رذیذ ثب خغب هار هی ؽد یب خیش. -2
افلاس کذب تب ایک خغبی تغت رذیذ اص ثیي ثشد. -9
ارشای وگی تغت ب ثشسعی فضت ارشای توبهی تغت ب. -4
5- Refactor ک وچبى تغت ب ثذى خغب ارشا کشدى کذبی ؽت ؽذ رذیذ ثشسعی ای
هی ؽذ.
یبص داسین.PHPUnit Selenium Remote Controlثشای ارشای تغت ب هب ث ثشبه بی
یک پرژ جذیذ ایجاد هی شد فایلای زیر یس در پرژ yiic webappلتی تعظ
ایجاد هی شذ ک هربط ب تست براه است:
057
testdrive/
protected/ containing protected application
files
tests/ containing tests for the
application
fixtures/ containing database fixtures
functional/ containing functional tests
unit/ containing unit tests
report/ containing coverage reports
bootstrap.php the script executed at the very
beginning
phpunit.xml the PHPUnit configuration file
WebTestCase.php the base class for Web-based
functional tests
ثشای ارشای تغت ب هی تاى کذبی صیش سا ؽت :
% cd testdrive/protected/tests
% phpunit functional/PostTest.php // executes an individual
test
% phpunit --verbose functional // executes all tests
under 'functional'
% phpunit --coverage-html ./report unit
reportسا دس پؽ را اجرا هی کذ گسارشی unitدعتس آخش کلی تغت بی داخل پؽ
ایجاد هی کذ.
قت ارشا ؽذ ثبؽذ تب ثتاذ گضاسػ ب سا xdebug extensionکت : ثشای ارشای تغت ب صتوب ثبیذ
ایزبد وبیذ.
Bootstrapتغت
هضتای ایي فبیل ث ؽکل صیش اعت :
$yiit='path/to/yii/framework/yiit.php';
$config=dirname(__FILE__).'/../config/test.php';
require_once($yiit);
require_once(dirname(__FILE__).'/WebTestCase.php');
Yii::createWebApplication($config);
058
ث ؽکل صیش هی ثبؽذ : protected\config\test.phpفبیل هضتای
returnCMap::mergeArray(
require(dirname(__FILE__).'/main.php'),
array(
'components'=>array(
'fixture'=>array(
'class'=>'system.test.CDbFixtureManager',
),
/* uncomment the following to provide test database connection
'db'=>array(
'connectionString'=>'DSN for test database',
),
*/
),
)
);
سا اص صبلت db'=>array'اگش ثشبه هب ؽبهل یک یبک اعلاػبتی یض ثبؽذ ثبیذ دس کذ ثبلا لغوت
ثشبه سا اسد وبیین. 'connectionString'تضیش خبسد کشد
آزضؾب سیطیز
ىا : URLایجاد
یک آدسط رذیذ هی تاذ ث ؽکل صیش تؼشیف ؽد :
$url=$this->createUrl($route,$params);
params$ث هغیش هسد ظش اؽبس هی کذ route$ث کتشلش ربسی اؽبس داسد this$ک دس آى
غتذ ک تعظ سدی اص کبسثش دسیبفت هی ؽذ. GETساهتشبی ع ؽبهل لیغتی اص پب
ث عس پیؼ فشك آدسعب داسای عبختبسی هبذ صیش هی ثبؽذ :
http://serverhost/index.php?r=post/read&id=100
ایي سػ آدسط دی کبسثشپغذ یغت دس آى صشف کلوبت ب آؽبیی ث کبس سفت اعت. هخلا
سا تظین وبیین ث گ urlManagerهی ثبؽذ. ثشای سفغ هؾکل فق هب ثبیذ routeک هخفف r صشف
ای ک آدسعبی تلیذ ؽذ هسد پغذ کبسثش الغ ؽذ.
059
ث ربی آدسط post/100/پظ اص ازبم ایي کبس هب آدسعبی ثتشی خاین داؽت هخلا آدسط
/index.php/post/read/id/100 عتفبد خاذ ثد. هسد ا
ث ؽکل صیش اعت : configض ازبم ایي کبس اعتفبد اص تظیوبت داخل فبیل
array(
......
'components'=>array(
......
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'pattern1'=>'route1',
'pattern2'=>'route2',
'pattern3'=>'route3',
),
),
),
);
تشرو ؽد. patternثبیذ ث چ routeهب هؾخـ هی کین ک چ rulesدر آرایه
دس ؽکل کبهلتش پیؾشفت تش یک هغیش هی تاذ ث ؽکل صیش تؼشیف ؽد :
'pattern1'=>array('route1', 'urlSuffix'=>'.xml',
'caseSensitive'=>false)
urlSuxهی کذ ک ث عس پیؼ فشك اداه بی آدسط سا هؾخـnull اعت. ث ػاى هخبل هب هی
ث کبس هی سد ؽبیذ ثشای هب ثیؾتش ث یک post/100/ک ث ربی post/100.html/تاین داؽت ثبؽن
سا ثشاثش urlSuxآدسط ایتشتی ؽجی ثبؽذ یب ثیؾتش آى سا ثپغذین. الجت ثشای ایي کبس ثبیذ همذاس
ظش لشاس دین.همذاس هسد
caseSensitive هؾخـ هی کذ ک آیب ایي آدسط ث کچک ثضسگ ثدى صشف صغبط اعت ک ث
اعت. nullعس پیؼ فشك ثشاثش
.
index.phpمخفی کردن
ذاؽت ثبؽین ثبیذ تظیوبتی سا ثش سی index,phpثشای ایک دس آدسط دی بی هب یبصی ث ؽتي
خد یض لشاس دین ایي فبیل htaccess.زبم دین. هی تاین ایي تظیوبت سا دس فبیل ا Apacheعشس
افلی لشاس داؽت ثبؽذ. هضتای آى ث ؽکل صیش اعت :index.phpثبیذ دس هغیش افلی دس کبس
061
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
لشاس falseثشاثش urlManagerسا دس کبهپت showScriptNameهمذاس یژگی configصبل ثبیذ دس فبیل
دین.
اص آدسط this->createUrl('post/read',array('id'=>100))$صبل هب هی تاین ثشای دعتشعی ث
/post/100 .اعتفبد وبیین
Login: ؾبذز ثطب 1ظب
db_demoثب ب databaseؾبذز
Import وطزschema :ظیط زض آ
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `tbl_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(128) COLLATE utf8_persian_ci NOT NULL,
`password` varchar(128) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci
AUTO_INCREMENT=24 ;
INSERT INTO `tbl_user` (`id`, `username`, `password`) VALUES
(22, 'ali', '123'),
(23, 'hasan', '456');
ثبفض ایؼبز ػسی ث قى ظیط ی قز :
060
yiic webapp demoثب زؾشض demoثب ب yiiؾبذز یه دطغ ػسیس
configزض فبی giiفقب وطز
سؾیبر ظیط :ثب mysqlسقیی ثبه اعلافبسی
'db'=>array(
'connectionString' =>
'mysql:host=localhost;dbname=db_demo',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
ؾبذز س ظیط : Model generatorضز ث
ؾبذز وشطط ظیط : Crud generatorضز ث
062
كبس ػس http://localhost/demo/index.php?r=userكبس آزضؼ
ث قى UserIdentity.php یطایف فبی C:\xampp\htdocs\demo\protected\componentsضفش ث ؿیط
ظیط :
<?php
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$username=strtolower($this->username);
$user=User::model()-
>find('LOWER(username)=?',array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
069
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId() // overrided
{ return $this->_id; }
}
اضبف وطز شس ظیط Use.php یطایف فبی C:\xampp\htdocs\demo\protected\modelsضفش ث ؿیط
ث آ :
public function validatePassword($password)
{
return ($this->password == $password);
}
ali/123ثبظ وطز آزضؼ ظیط ضز ث ؾبیز ثب حؿبة
http://localhost/demo/index.php?r=site/login
فقب وی ثبیس ث قى ظیط ف و : Usersضا ثطای وشطط loginاط ثرای اوك
ضا وذی ی وی. ؾذؽ ث login.phpضفش فبی C:\xampp\htdocs\demo\protected\views\siteث آزضؼ
ی وی. pasteضفش آ ضا C:\xampp\htdocs\demo\protected\views\userآزضؼ
userضا وذی ی وی آ ضا زض اشبی فبی وشطط loginضفش اوك SiteController.phpث فبی وشطط
لطاض ی زی. UserController.phpیقی فبی
ضا یطایف بیی اػبظ زؾشطؾی ضا ی accessRulesشس UserController.phpحشب ثبیس زض فبی وشطط
ثسی یب ولا ای شس ضا حصف بیی.
ثطی: Userحب ثب اضز وطز آزضؼ ظیط ی سای ث نفح ضز وبضثط سؾظ وشطط
http://localhost/demo/index.php?r=User/login
064
Register: ؾبذز ثطب 2ظب
productsس ثب ب ؾبذز دطغ ػسی
PhpMyAdminسؾظ productsؾبذز ثبه اعلافبسی ثب ب
065
tbl_productsؾبذز یه ػس ثب ب
ؾبذز ای ػس ث قى ظیط اؾز SQLوس
CREATE TABLE IF NOT EXISTS `tbl_products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`price` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
اضز ز سب ػس ایؼبز قز. PhpMyAdminی سا ای وس ضا ؿشمیب یع زض
اضز وطز مبزیط دیف فطو زض ػس
products\protected\config\main.phpیطایف فبی
'modules'=>array(
066
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'123',
// If removed, Gii defaults to localhost only.
Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
),
چی :
/*
'db'=>array(
'connectionString' =>
'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),
*/
'db'=>array(
'connectionString' =>
'mysql:host=localhost;dbname=products',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
http://localhost/products/index.php?r=giiثبظ وطز آزضؼ
ضز 123اضز وطز ضع
ؾبذز س
067
ؾبذز وشطط ی ب
ظوطز آزضؼ ظیطثطضؾی نحز ثطلطاضی اضسجبط ثب ثبه اعلافبسی سؾظ ثب
http://localhost/products/index.php?r=products
068
registerؾبذز فط ػسیس ثطای طجز وبلای ػسیس ثب ب
وس ظیط ؽبط ی قز و آ ضا وذی ی وی : generateدؽ اظ ظز ویس
069
ی : ف وذ
071
یطایف ی وی. وس ثبلا products\protected\controllers\ProductsController.phpوس وشطط ضا زض ؿیط
ی وی. pasteضا زض آ
ضا انلاح ی وی : accessRulesزض ی فبی وشططشس
array('deny', // deny all users
'allow'=>array('*'),
),
وطز ثزی ث قى ظیط انلاح ی وی : pasteضا و registerی اوك وس ب
تضیح کذا :
–وشطط –اؼب قس . یقی سبی فبیبی س Giiالا سبی وبضبی لجی ث نضر ذزوبض سؾظ
ای طح وبضثط فط وسبی طثط ث ؾبذز اوك فط ...ی ث عض ذزوبض سیس قس. زض –یب
ضا ذز یطایف بیس و سضیح آب زض ظیط آس اؾز. Registerثبیس وسبی شس
public function actionRegister()
registerوس طثط ث قطؿ شس
$model=new ProductsModel('register');
لطاض ی زس. یقی registerضا ثطاثط یؿبظز ؾیبؾز ای فط ProductsModelای وس یه اظ س
ب چیعی و زض حی ؾبذز فط ث فا ؾبضی كرم زی.
اجش ی سا ؾبضی ضا حصف ز زض اػطای نحیح دطغ كىی ایؼبز راس قس. یقی ث قى ظیط:
070
$model=new ProductsModel();
زؾشض ثقسی :
if(isset($_POST['ProductsModel']))
{ //start if block
ظبی اػطا ifزض ای قطط ب ثطضؾی ی وی و آیب حشای فط سؾظ وبضثط دط قس اؾز یب ذیط ثن
اػطا ی قز و ifی قز و وبضثط اعلافبر نحیح وب ضا زاذ فط اضز وطز ثبقس ط وس ثقس اظ
وس ظیط اؾز.
} //end if block
$this->render('register',array('model'=>$model));
بیف زاز ی قز و زض الـ ب فبی فط ب ثز و آ ضا سؾظ register ث اؾغ ای زؾشض ی
gii .ؾبذش ثزی
وبثط http://localhost/products/index.php?r=products/Registerلاحؾ ی طزز و ثب ثبظ وطز آزضؼ
و registerاػطا كس ی فط ifفط ضز اعلافبر ضا كبس ی وس ای ث آ قی اؾز و ثن
ط قز :اؾز اػطا قس. صا ی سا وس ثبلا ضا ث قى ظی ifذبضع اظ
if(isset($_POST['ProductsModel']))
{
---block if codes ---
}
else
{ $this->render('register',array('model'=>$model)); }
زؾشض ثقسی :
$model->attributes=$_POST['ProductsModel'];
ی model$اضز قی (massive)وی مبزیط اضز قس زض فط ث نضر یىؼب ای زؾشض ثبفض ی قز و
قس. اضز وطز مبزیط ث نضر یىؼب ثطای اضز ایشی ثؿیبض دط وبضثطز ی ثبقس. ػی زؾشطؾی
وبضثط ث سه سه مبزیط فیس ضا ی یطز و زضػیطی اظ ه وطز فط ب ثؿیبض طط اؾز.
: وس ثقسی
if($model->save()) {$this->redirect(array('view','id'=>$model-
>id));}
ث CModelاظ ولاؼ saveاػطا ی وس. شس model$ضا زض saveانی سطی وس قبیس وس ثبلا ثبقس. و شس
زؾشض ب ث اضص ضؾیس اؾز دؽ جبیس زجب آ زض فبی س ذزب ثطزی. ای RegisterModelولاؼ
ضا ث وبضثط viewاػطا قز اط ث زضؾشی اػطا قس آب ی model$ثطای save ثطضؾی ی وس و شس
072
ضا یع ثطای ای ی ی فطؾشس و فمظ كرهبر ی ضوضز ثب ی idكب ی زس. زض ض دبضاشط
id كب زاز قز زیط ضوضزب. ی سا ثطای ایif یه else قز و زض نضر بفك ثز
یه دیغب ذغبی بؾت ضا بیف زس. save ف
اػطای دطغ. حب و چیع زضؾز اؼب قس آزضؼ ظیط ضا زض طضط ثبظ ی وی :
index.php?r=products/Registerhttp://localhost/products/
ضا اػطا ی بیس و شیؼ آ ثبیس بس قى ظیط ثبقس : productsزض وشطط registerای آزضؼ شس
حب فط ضا ثب ز مساض اشحب ی وی ظلا :
ثبیس ث نفح ظیط شم قی : submitدؽ اظ ظز زو
079
مساض آ ثطای ای نفح اضؾب قس id دبضاشط viewقس renderاظ كبس ی قز و چ دؽ
اؾز.
http://localhost/products/index.php?r=products/view&id=7
ی ػس ضا ب ی وی :حشا PhpMyAdminثطای ثطضؾی نحز طجز ضوضز اضز قس زض
كبس ی قز و آذطی ضوضز ب ضوضزی اؾز و ب اضز وطز ای.
074
و زض ػس ث وبض ضفش ثز ث زی ای و ویس انی ػس ثز زض فط ب بیف زاز idىش : فیس
قز. كس صا ز سیس فط ثبیس زلز وطز و فیس ویس انی زض فط ؽبط ی
075
ضی ب
ضعصاضی
ث فا ظب ظبی و ی ذای ضع ضز ضا زض ثبه زض ثؿیبضی اظ اضز یبظ ث ضع صاضی ػز زاضز.
ث قی یه عطف one-wayب زاضز و یه ضـ MD5اعلافبسی طجز بیی. یه ضـ ضع صاضی
یی آ ث عض ؿشمی ػز ساضز. ثطای طجز ضع ضز وس صاضی قس زض ثبه اؾز یقی اىب ضع كب
اعلافبسی ث قى ظیط ف ی وی :
Public function beforeValidate() {
$this->password = $this->encript($this->password);
}
Public function encrypt($value) {
Return MD5($value);
}
اؾشفبز اظ ای ضـ ظلا زض فط ث ضظضؾبی ی سا ضع ضز ضا كبس سغییط زاز طچس ی دؽ اظ
سا اظ آ ثطای مبیؿ نحیح ثز ضع ضز اضز قس اؾشفبز وطز.
فقب ؾبظی ووی بی طضط
ی و وبضثط دط ی وس زض زض نضسی و ووی بی طضط وبضثط فقب ثبقس مبزیط اضز قس زض فیس بی
ثطای كرهبر ضز وبضثط ی سا Remember Meحبفؾ ثبلی ی بس. اظ ای ضـ ظلا زض لؿز
ضا كبز وی ثب زؾشض ظیط اػ ی قی : configثط طفز. اط فبی
// application components
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
),
076
غیط فقب ی قس. حب زض س ضز وبضثط و falseفقب یب ثب trueو سؾظ آ شذیط ؾبظی مبزیط ثب
ظیط كبس ی قز و قب سغیبر دیكطفش سطی ظ سر ظب ثبلی بس ووی ب ػز زاضز :
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
فضبب ب آزضؼ ب
مسیز ای مستعار
اؾشفبز وی.ظب : Path Aliasبظ ث آزضؼ ػبیی زاضی ی سای اظ زض ذیی اظ ػببی ثطب و ی
Protected/Controller/Post/Updateث ػبی
application.Controller.Post.Updateاظ ای آزضؼ اؾشفبز ی وی :
ث ػبی / اظ فلاز . اؾشفبز ی قز. Aliasزض آزضؼ زی
ضا ث آزضؼ القی aliasآزضؼ ()YiiBase::getPathOfAliasؾی زض ط ػبی اظ ثطب ی سا ث
آ سجسی وطز.
سطػ ی yii/framework/web/CControllerث system.web.CControllerث فا ظب
ػسیس ضا ثطای ثطب root aliasیع ی سا یه ()YiiBase::setPathOfAliasث ؾی قز.
Applicationث آزضؼ ی بغ اقبض ی وس ث آزضؼ root aliasغ ب زض ب كرم وطز.
اظ آب اؾشفبز ز. Aliasط و ی ساز زض ؿیطبی چس و ویسی ظی
System -> Yii Framework Directory
Zii -> Zii Lirary Path
Application -> base directory = path to protected folder
Webroot -> entry scripts directory
Ext -> third-party extensions directory
077
Import کلاط ا : کزدن
دیف سقطیف یؿشس ضا ثبیس Yiiب ؿشس سؾظ componentسب ولاؾبی ذبضػی و ذبضع اظ
import وطز. ؾبیط ولاؾب یبظی ثimport .وطز ساضس
Yii::import(“system.web.CController”);
Import قبزinclude , require زس. ؾطفز یؿز طچس وبض كبثی ضا اؼب یimport
ثیكشط اؾز ثطجطی ثیكشطی زاضز.
Import directory
وطز سب ط ظب و ذاؾشی ولاؾی اظ آ زایطوشضی ضا importی سا ؿیط یه زایطوشضی ضا
وی سب ثب نسا ظز ب آ ولاؼ ای اط اىب دصیط قز. importفطاذای
Yii::import(“system.web.* ”);
اؾز.ثشط اؾز ولاؾبی وبضثط Classقطؿ ی قس و اثشسای و Cثب حطف Yii وشبثرب بی
قطؿ قس سب سساذی ایؼبز كز. Cثب حطفی غیط اظ
Class Mapاستفاد اس
ب ی ساضز زض ط ػبی ثط importی سا سقسازی اظ ولاؾب ضا اظ لج سقطیف وطز زیط یبظی ث
سا اظ آب اؾشفبز وطز. ثطاؼ اؼب ای وبض ثبیس ولاؾبی ضز اؾشفبز لج اظ
CWebApplication::run() : ولاؾب ضا سقطثف وطز.ظب
Yii::$classMap=array(
'ClassName1' => 'path/to/ClassName1.php',
'ClassName2' => 'path/to/ClassName2.php',
......
);
Current Path:
Sample : C:\xampp\htdocs\y1\protected\views\site
Getter: echo dirname(__FILE__);
078
Setter: It returns the current path where this function calls.
Base Directory:
Sample : C:\xampp\htdocs\y1\protected
Getter : echo Yii::app()->basePath; / anywhere
Setter : Config File (Application) :
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'
یه ؿیط ث عض وی ث قى ظیط سقطیف ی قز :
http://hostname.com/index.php?r=ModuleID/
ControllerID/actionID/Parm1/Value1/Parm2/Value2/…
اؾز. routeقطف و rزض آزضؼ ثبلا حطف
Applicationضا قز.ثب افب سؾیبر زض ModuleIDاط ثطب قب یچ بغی جبقس ی سا
ثشط یشا ؿیط ثبلا ضا ث قى ظیط انلاح ز : SEOثطب ثطای
http://hostname.com/index.php/
ModuleID/ControllerID/actionID/Parm1/Value1/Parm2/Value2/…
الگ ای وام گذاری
ثطای زضذاؾز ث قى ظیط اؾز: ای حطف وچه ثعضي
http://hostname/index.php?r=ControllerID/ActionID
زضذاؾز ث حطف وچه ثعضي حؿبؼ ی ثبقس.
,basePath$اؼب ی قز. ظب camelCaseولاؾب ث قى –ساثـ –بصاضی شغیطب
runController(), LinkPager
ثبقس. وچه شغیطب حطف ا
Cولاؾبی وبضثط یه حطف ث غیط اظ Cولاؾب حطف ا ثعضي ثطای ولاؾبی زاذی ثب حطف
079
view_قطؿ قز ظ _حشب حطف ا ثب privateثطای ولاؾب افضبی
ی زؾشطؾی ث ای siteController.phpثبقس ظ Controllerب فبی وشططب ثبیس قب و
و ثبفض ایؼبز ایز ثیكشط ی قز index.php?r=siteاؾز ظ : Controllerولاؼ ثس و
ظیطا و ب انی فبی ضا اظ وبضثطا رفی ی زاضز.
CController.phpزض فبی CControllerب فبی ولاؼ ثبیس ثب ب ولاؼ ثبیس یىی ثبقس ظلا ولای
لطاض یطز.
.edit.php ب فبی آ editب ولاؼ آ editآ یىی ثبقس ظلا ی ب فبی ی ثبیس ثب ب فبی
ب ػسا فیسبی ثبه اعلافبسی ثبیس ثب حطف وچه ثبقس.
یب tbl_mytableاظ ػسا قس ظ _ػسا فیسبیی و چس و ای ؿشس ثبیس ثب
first_name
tbl_table1ؿ قز ظ قط _tblب ػسا ثشط ؾز ثب دیكس
اظ فا tbl_usersزض ب ػسا ثشط اؾز اظ وبر فطز ث ػبی ػـ اؾشفبز وطز ظلا ث ػبی
tbl_user .اؾشفبز قز. ثطای ب صاضی فیس ب ث ی قى
Configuration
Configuration : یه آضای اؾز و دبضاشطبیی ضا كرم ی وس
array('name'=>'My application', 'basePath'=>'./protected')
زض ط ػبی ثطب ث ای قى اؼب ی قز.
ىش : اط دبضاشطی سقطیف كز مساض دیف فطو آ زض ؾط طفش ی قز.
چس ب زایطوشضی :
Alias Path access ب
application base
directory applicati
on WebRoot/protected CWebApplication::basePath
WebRoot WebRoot/protected/runtime CApplication::runtimePath.
Extension WebRoot/protected/extensions CApplication::extensionPath
modules WebRoot/protected/modules
controllers WebRoot/protected/controllers CWebApplication::controller
081
Path
views WebRoot/protected/views CWebApplication::viewPath
Views/Controll
erID
WebRoot/protected/views/Cont
rollerID CController::viewPath
Layouts WebRoot/protected/views/layo
uts
CWebApplication::layoutPat
h
Views/system WebRoot/protected/views/syste
m
CWebApplication::systemVi
ewPath
Assets WebRoot/assets CAssetManager::basePath
themes WebRoot/themes CThemeManager::basePath
Class Map ای اىب زض :yii ػز زاضز و یه ؾطی اظ ولاؾب اظ لج سقطیف قس ثس ایى زض
یع اؾشفبز ی وس. ظب : yiiثطب یبظ ث سقطیف ؼسز زاقش ثبقس و اظ ای ضـ ذز
Yii::$classMap=array(
'ClassName1' => 'path/to/ClassName1.php',
'ClassName2' => 'path/to/ClassName2.php',
......
);
Automatic Code Generation
Yii زاضای اثعاضی ث بGii ز بیس. ای اثعاض سحز ة ی ی ثبقس و ثؾی آ ی ساس وسب ضا ایؼب
اثعاضی اؾز و سحز یه بغ اضائ قس اؾز ثطای اؾشفبز Giiثبقس اظ عطیك طضط لبث اػطاؾز.
سؾیبر ظیط ضا زاقش ثبقی : configاظ آ ثبیس اثشسا زض فبی
return array(
......
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'pick up a password here',
// 'ipFilters'=>array(...a list of IPs...),
// 'newFileMode'=>0666,
// 'newDirMode'=>0777,
),
),
080
);
ث عض ذزوبض زض اثشسای ؾبذز دطغ ػز زاضس ی ث نضر Giiفقب ؾبظی ىش : وسبی
Comment .ی ثبقس و ثطای اؾشفبز اظ آ ثبیس ای ثن وس ضا اظ حبز سضیحبر ذبضع ز
یه ضع ضز لطاض زاز قس اؾز. Giidثطای ایؼبز حبفؾز زض اؾشفبز اظ
ایؼبز قس اؾز اط ثرای آ ضا زض ػبی Localhostفبز ثط ضی ثطای اؾش Giiث عض دیف فطو
ضز ؾط سقطیف بیی. IPضا ثطاثط GiiModule::ipFiltersزیط اؾشفبز وی ثبیس دبضاشط
فبیب دق بیی ضا ایؼبز ی بیس ثبیس ؼظ اؾشفبز اظ فضبی ؾطض زاز قس Giiاظ آؼبیی و اثعاض
ای [GiiModule::newDirMode] [GiiModule::newFileMode] سؾظ ز دبضاشط ثبقس و
وبض اؼب ی قز.
سب زض ظب عطاحی ؾبیز ثبیس اؾشفبز قز چ و ای اثعاض ػز سؾق اؾز. صا زض Giiىش : اظ اثعاض
غیط فقب طزز. giiب ضا اساظی بیی ؾبیز ثبیس زؾشطؾی ث
Giiی سا ث http://hostname/path/to/index.php?r=giiؽ اظ اؼب سؾیبر سؾظ آزضؼ د
ا وطز.سزؾشطؾی دی
ضا ث عض زرا ؾفبضقی وطز سب وس بیی و سیس ی وس زاضای ؽبط یب ؾشرشبضی Giiىش : ی سا
زرا ب ثبقس. حشی ی سا آ ضا ث ای ؿشطـ زاز سب وبذز ب ؾبیط اػعای ضز یبظ ب ث
ضا ث قى زرا سیس بیس.
ػؿ ب
Sessionتؼشیف یک
Yii::app()->session->add(„item‟,‟value‟);
Sessionفشاخای یک
echo Yii::app()->session[„item‟]
082
Controller.phpفبی
ایي فبیل دس هغیش صیش لشاس داسد :
\protected\components
و کتشلشبی پشژ اص ایي کلاط اسث ثشی هی کذ ثبثش ایي هضل هبعجی ثشای تؼشیف هتغیش بی
هن حاثت اعت.
دس ایي فبیل ث عس پیؼ فشك ع هتغیش تؼشیف ؽذ اذ ک ػجبستذ اص :
public $layout='//layouts/column1';
لبلت پیؼ فشك سا ثشای و کتشلش ب تؼشیف هی کذ.
public $menu=array;)(
سا تؼشیف هی کذ ک ثشای تؼشیف ه ب دس ی ث کبس هی سد. menu$هتغیش
public $breadcrumbs=array;)(
هتغیشی ثشای تؼشیف هغیش ربسی تؼشیف هی کذ.
TimeZoneكى
configثؼضی عیغتن ػبهل ب هوکي اعت تظیوبت صهبی هتفبت ثبؽذ ک ثشای صل آى دس فبیل دس
ث ؽکل صیش کذب سا اضبف هی کین :
<?php
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'timezone'=>'Asia/Tehran',
089
چس ظثبی
ث داخل پؽ frameworkى یک صثبى اثتذا پؽ هشثط ث آى صثبى سا اص داخل ثشای اضبف کشد
\protected\messages کپی هی کین هخل پؽde یبar غیش هک وگی دس\framework\messages
کذ صیش سا اضبف هی کین : configلشاس داسذ. صبل دس فبیل
<?php
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'language' => 'de',
وچیي
//application components
'components'=>array)
'coreMessages'=>array ) ' basePath'=>'protected/messages ,'( (,
دبضاشطبی ثطب
به اص آب اعتفبد کشد هخل آدسط تؼشیف ود دس عل ثش configهی تاى پبساهتش بیی سا دس فبیل
ایویل هذیش ث ؽکل صیش :
'params'=>array(
'adminEmail'=>'web.ebox@gmail.com',
),
صبل دس ش ربی ثشبه هی تاى تعظ کذ صیش ث پبساهتش هسد ظش دعتشعی پیذا کین :
echo Yii::app()->params['paramNam‟];
084
بثـ :
Agile Web Application Development with Yii1.1 and PHP5
yii-1-1-application-development-cookbook
The Definitive Guide to Yii
آهصػ بی آلبی لشی الوي
آهصػ عبخت ثلاگ
top related