Yii Framework - Aviny.com

185
Yii Framework هشر ػولی اعتفبدوبی سا غ فبسعیة تؾبس دس ثشای ابثغتبى ت0991 ثشریبىف : ػلی تبلی تشرو

Transcript of Yii Framework - Aviny.com

Page 1: Yii Framework - Aviny.com

Yii Framework

غ فبسعی ساوبی ػولی اعتفبدهشر

ثشای اتؾبس دس ة

0991تبثغتبى

تشرو تبلیف : ػلی ثشریبى

Page 2: Yii Framework - Aviny.com

0

Page 3: Yii Framework - Aviny.com

2

ایي کتبة ثشای اعتفبد دس ایتشت ث فست سایگبى اسائ ؽذ اعت.

ثب رکش هجغ ثلاهبغ اعت. شگ اعتفبد اص هغبلت

Page 4: Yii Framework - Aviny.com

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

Page 5: Yii Framework - Aviny.com

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. اعلاػبتی ثبک ث اتقبل

Page 6: Yii Framework - Aviny.com

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. ب داد اثغتگی

Page 7: Yii Framework - Aviny.com

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

Page 8: Yii Framework - Aviny.com

7

: سخه ملف

افعاض ب ط ضظ قبس دیكطفشبی ػسیسی زض حظ فبضی اعلافبر ی ثبقی. عب ثب سؾق ؾرز

اظی دیكطفز ی وس. ط افعاض بیی و نضرسیس لغقبر ثب لبثیز بی دیكطفش، ط افعاض ب یع ث

زض ای یب ؾ ثطب یؿب لطاض ی زس ط وسا فضببی ػسیسی ضا زض اذشیبض وبضثطا ذز

كشط اؾز.عطاحب ة ث فا سیس وسب ط افعاض ثؿیبض ثی

سؾق PHPثبظزی ثؿیبض ثبلا اؾز و ث ؾی ظثب ؾطفز ثب ثؿشط ط افعاضی یه Yiiفطی ضن

یبفش اؾز سابیی سیس ااؿ ط افعاضبی سحز ة ثب میبؼ بی ب ضا زاضا ی ثبقس.

ز و ث سبظی وبض ثب ای ط افعا فبضؾی ظثبی اؾ وه ث دیكطفز ثطب یؿبای وشبة سبیف سف اظ

سب حس اىب قس اؾزضی ضا زاضس چی ؾقی فعا لهس آقبیی ثب ای حیظ ط ا ز اسضا آغبظ

سجسی قز. ثطب یؿبسب وشبة ث نضر یه طػـ ثطای قزػعئیبر غبت یع حبػ

وشبة بی فی فطی ضن زض ؾبیز ضؾیای وشبة قب سطػ بیی اؾز و فیب اظ ضابی

چی ضابی وسبی زاذ فبیبی فطی ضن یع ضز ثططزا قس اؾز ای ضزشكط قس زض

زض اضز اسوی سؼطثیبر ظببی فی ف آضز قس اؾز.سػ لطاض طفش اؾز

ی قس اؾز غبت ث نضر یىذبضچ ؾ اضائ فطی ضن اضائ قس ؾق 1.1.8سب ای سبضید و ؿر

دقف زاز قز. قز وی اىببر ؿر بی لجی

سػ قب زض ؿر بی ثقسی انلاح غئب ای وشبة یع زاضای اقىبلاسی ی ثبقس و ثب ضابیی

ایی اظ عطیك آزضؼغفب دیكبز یب ؾط زض نضر زاقش ط ؾا، .ذاس قس

[email protected] ثب ف زض یب ثصاضیس.آ ضا

ثطب یؿب فبضؾی ظثب ثطزاقش ضا اضسمبی فی ای وشبة ثشاس بی طچس وچه زض ایساض

ثبقس.

فی ثطػیب

1390قطیض

Page 9: Yii Framework - Aviny.com

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 یه وجز ث ؾط یطؾس ی یك ایغض یؿز. فطی ای ؿئ یع دكشیجبی ی وس

Page 10: Yii Framework - Aviny.com

9

ضا 5بچبضس و ذیی اظ لبثیز بی ؿر 4ثطای ایؼبز سغبثك ثب ؿر بی CakePHPضوبیی بس

ثب Yii Framework ی و ثبفض ایؼبز سغبثك طزز بزیس ثیطس یب ث ای آب ضا سغییط زس

و اوظط 2011اظ لبثیز بی آ اؾشفبز ی وس ای ؿئ زض ؾب PHP 5سطوع ثط ضی ؿر

.ث قبض ی ضزحبیز ی وس سب یه وجز یؿز ثى یه عیز PHP 5یعثبب اظ

ی اؾز و زض سؾی س MVCاؾشفبز قس اؾز. MVCاظ ای عطاحی Yiiزض ؾبذز فطی ضن

–س–ط افعاض قطفی ی قز زض ای س اػعای ثطب ث ؾ لؿز انی وشط وس

ضا ضفبیز وطز اؾز ای MVCسبی لافس Yii. سمؿییكسػطیبسازبزضآجطلطاضیكز1زیسب

زض قى ظیط آس اؾز: MVCوبضی

ی طایی ث فا یه ان ای ضفبیز قس اؾز زؾشطؾی ث ق Yii. زض یه حیظ وبلا قی طا

چیع حشی زؾشطؾی ث ػسا ثبه اعلافبسی ضاثظ ... یع زض لبت قی طایی سقطیف ی قز و ای

و چب اظ زؾشطؾی بی ضاثغ ای دكشیجبی ی CakePHPؿئ زض مبث فطی ضوبیی ظ

اؾز.وس یه عیز فس

Page 11: Yii Framework - Aviny.com

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ثبظزی یكز. ث زاضی و قطف ثبظزی

سػ ویس :

Page 12: Yii Framework - Aviny.com

00

یی ذز اؾز.ثؿیبض ثیكشط اظ ضلجبی لس Yiiكبس ی قز یعا ثبظزی آظبیف قس ثطای

ضز اظ یػی بی زیط :چس

AJAXدكشیجبی اظ -

MultipleDBدكشیجبی اظ ثبه اعلافبسی چس ب -

Templatesدكشیجبی اظ -

Modules دكشیجبی اظ -

Authentication دكشیجبی اظ -

Validationدكشیجبی اظ -

پیص ویاسای قبل اس ضزيع کار

یس ثب ان ای ثطب یؿی آقبیی زاقش ثبقس. چی ان ای وبضثط ثب Yiiثطای قطؿ وبض ثب

ضطضی اؾز. وبضثط ثبیس ثب فبی قی طایی چی ثبه PHPعطاحی ة آقبیی ثب زؾشضار

بی اعلافبسی آقب ثبقس. سقسازی اظ دیف یبظ ب زض ظیط آس اؾز:

XHTML -

CSS -

JavaScript & JQuery -

PHP -

Object Oriented Programming -

SQL Language & PhpMyAdmin -

کزد تلیذمی تان Yiiچ بزوام ایی را با

بؾت ثطای عطاحی ؾبیز ب ثطب بی سحز ة ثب سطافیه ثبلا اؾز. ؾبیز بی Yiiفطی ضن

سیطیز حشا اظ ػ ثطب بیی ؿشس طسجظ ثب سؼبضر اىشطیه، دضسب ب، فط ب ؾیؿش بی

Page 13: Yii Framework - Aviny.com

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 .ضطضی ؿشس ثبیس فقب ثبقس

Page 14: Yii Framework - Aviny.com

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

Page 15: Yii Framework - Aviny.com

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ؾبذشبض وب زؾشض

Page 16: Yii Framework - Aviny.com

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

Page 17: Yii Framework - Aviny.com

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

Page 18: Yii Framework - Aviny.com

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/

Page 19: Yii Framework - Aviny.com

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چ

مزاحل د گاو تلیذ بزوام :

Page 20: Yii Framework - Aviny.com

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 .ب ی ثبقس

Page 21: Yii Framework - Aviny.com

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;

Page 22: Yii Framework - Aviny.com

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 یب اؾىطیذز ضزی فش ی

Page 23: Yii Framework - Aviny.com

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ؾبیز ی ساس ث آ زؾشطؾی ؿشمی زاقش ثبقس. ثب ط زضذاؾز وبضثط

وبضب ضا زجب ی وس.

Page 24: Yii Framework - Aviny.com

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',

Page 25: Yii Framework - Aviny.com

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دیبز ؾبظی سىیه بی

Page 26: Yii Framework - Aviny.com

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();

Page 27: Yii Framework - Aviny.com

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حشیبر ی زاذ یه

بر ذز ضا ث دبیب ی ضؾبس نفح ؾبذش قس ضا ثطای وبضثط بیف ی زس.اوك فی

Page 28: Yii Framework - Aviny.com

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)

Page 29: Yii Framework - Aviny.com

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 ...

Page 30: Yii Framework - Aviny.com

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 ی وس. ضا زض نضر ػز فطاذای

Page 31: Yii Framework - Aviny.com

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ى اؾز قب ای شس ضا

Page 32: Yii Framework - Aviny.com

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(

Page 33: Yii Framework - Aviny.com

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ىش : اط مساض ثطكشی یه شس فیشط

فیشطب ی ساس ث ای سقطیف قس و سب ظبی اػطا قس و یه اوك ذبل اػطا ی قز. ثطای

زض سقطیف فیشط اؼب ی قز. فط + كرم –ای وبض ث ؾی فطبی + فیشطبی ثط اؾبؼ شس

ث ای –ی وس و فیشط سب ظبی اػطا قز و یه فیشط ث ذهل فطاذای قز زض حبی و فط

ضز.ثطای قی اؾز و فیشط سب ظبی اػطا ی قز و ای اوك زض یب اوك بی زضذاؾز لطاض سا

ب ولاؼ ضا زجب ی وس. –اوك بی ثط اؾبؼ قی فط +

فیشط ب ث ز زؾش سمؿی ی قس :

Page 34: Yii Framework - Aviny.com

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)(

Page 35: Yii Framework - Aviny.com

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',

Page 36: Yii Framework - Aviny.com

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)(

Page 37: Yii Framework - Aviny.com

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سضیحبر ثیكشط ث یىی دسیب ثرف

Page 38: Yii Framework - Aviny.com

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ای شس ب اوك فقب ضا ثط ی طزاس. زض نضسی و یچ اوك فقبی ػز ساقش ثبقس مساض

ی طزاس.

Page 39: Yii Framework - Aviny.com

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اظ اضز ثشط اؾز و اظ زؾشض

ای ی ساس سب قب ب آ اوك ثبقس و زض ی ولاؼ و ثبیس اػطا قز ضا كرم ی وس.

Page 40: Yii Framework - Aviny.com

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);

Page 41: Yii Framework - Aviny.com

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ؾط ضا كرم ی وس. ای آزضؼ ثبیس زاضای ؾبذشبض

كرم جبقس وشطط ػبضی ث فا وشطط لطاض ی یطز. اط ای آزضؼ ذبی ثبقس آزضؼ اوك ػبضی

Page 42: Yii Framework - Aviny.com

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فطو آ ذبی اؾز. ىش : اط لهس اؾشفبز اظ

Page 43: Yii Framework - Aviny.com

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$شط سیس بییس. دبضا

Page 44: Yii Framework - Aviny.com

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;

}

Page 45: Yii Framework - Aviny.com

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$آب مساض شغیط

ی قز.

Page 46: Yii Framework - Aviny.com

45

کىتزلزا : وکاتی در مرد

ضز یبظ اؾز ظ وسبی قب end userوشطط قب وسبیی اؾز و زض آب اعلافبر -1

$_GET $_POST .ای ؿ وسب فمظ زض وشطط لبث سقطیف ی ثبقس

اؾشفبز بیس.یه وشطط ی ساس یه س ػسیس ضا ثؿبظز -2

ثبقس. SQLوشطط ب جبیس قب وسبی -3

ثبقس. HTMLوشططب جبیس قب وسبی -4

اؾشفبز وطز. PHPزض وشططب ثبیس فمظ اظ وسبی -5

ولاؼ وشطط ثبیس سب حس اىب و حؼ ثبقس قب وسبی وسب ی طط ثبقس. وشطط ب -6

قلا قب وسبی ثؿیبض وی ؿشس.

فیبر زضیبفز زاز بی وبضثط زضیبفز سمبضبب ؾذؽ دطزاظـ بیشب اضؾب اعلافبر اضؾب -7

آب ث ثرف بی رشف ؽیف وشطط اؾز.

ا مذل

: ی مذلومدار ارث بزی ا

Page 47: Yii Framework - Aviny.com

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

Page 48: Yii Framework - Aviny.com

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ىش : اثعاض

س ث عض زؾشی ایؼبز بیی.ثبی

Page 49: Yii Framework - Aviny.com

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 : ای معزيف بزای اعتبار سىجی

Page 50: Yii Framework - Aviny.com

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>

Page 51: Yii Framework - Aviny.com

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'),

Page 52: Yii Framework - Aviny.com

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; ?>

Page 53: Yii Framework - Aviny.com

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 نضر

Page 54: Yii Framework - Aviny.com

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')

Page 55: Yii Framework - Aviny.com

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طفش اؾز. ث عض دیف فطو بغض و كبس ی قز ب ط

حطف ثعضي ایؿی اؾز.طفش ی قز ی زض ثطچؿت حطف ا

Page 56: Yii Framework - Aviny.com

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ای شس سبی دیببی ذغبی نبزض قس ثطای یه یب

Page 57: Yii Framework - Aviny.com

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)(

Page 58: Yii Framework - Aviny.com

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)(

Page 59: Yii Framework - Aviny.com

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()

Page 60: Yii Framework - Aviny.com

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)

Page 61: Yii Framework - Aviny.com

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>

Page 62: Yii Framework - Aviny.com

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ای ولاؼ دبضاشطبی طثط ث ضاثغ ؿ

Page 63: Yii Framework - Aviny.com

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 .ضا ثط ی طزاس

Page 64: Yii Framework - Aviny.com

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)

Page 65: Yii Framework - Aviny.com

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

Page 66: Yii Framework - Aviny.com

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()

Page 67: Yii Framework - Aviny.com

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ای شس یه ضوضز ػز زض ای

Page 68: Yii Framework - Aviny.com

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()

Page 69: Yii Framework - Aviny.com

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زض ضز دبضاشطبی ای شس ی سا ث شس

ی قس.

Page 70: Yii Framework - Aviny.com

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

Page 71: Yii Framework - Aviny.com

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';

Page 72: Yii Framework - Aviny.com

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(

Page 73: Yii Framework - Aviny.com

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

Page 74: Yii Framework - Aviny.com

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;

Page 75: Yii Framework - Aviny.com

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

ػز بیف اعلافبر ثبقس اؼب حبؾجبر.

Page 76: Yii Framework - Aviny.com

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';

Page 77: Yii Framework - Aviny.com

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زاذ

فطاذای یه ی زض ی زیط

Page 78: Yii Framework - Aviny.com

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');

}

}

?>

Page 79: Yii Framework - Aviny.com

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'

));

?>

Page 80: Yii Framework - Aviny.com

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

Page 81: Yii Framework - Aviny.com

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);

Page 82: Yii Framework - Aviny.com

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

Page 83: Yii Framework - Aviny.com

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',

),

),

),

),

);

Page 84: Yii Framework - Aviny.com

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;

Page 85: Yii Framework - Aviny.com

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();

Page 86: Yii Framework - Aviny.com

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()

Page 87: Yii Framework - Aviny.com

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ولاؼ ثبثطای

Page 88: Yii Framework - Aviny.com

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

Page 89: Yii Framework - Aviny.com

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>

Page 90: Yii Framework - Aviny.com

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.

Page 91: Yii Framework - Aviny.com

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.

Page 92: Yii Framework - Aviny.com

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.

Page 93: Yii Framework - Aviny.com

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پؽ ب عبختبس هشثط ث د

Page 94: Yii Framework - Aviny.com

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اگش فبیل هشثع پیذا ؾذ آى سا دس

Page 95: Yii Framework - Aviny.com

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'=>'&gt;&gt;',

'prevPageLabel'=>'&lt;&lt;',

),

'classic'=>array(

'header'=>'',

'maxButtonCount'=>5,

),

);

Page 96: Yii Framework - Aviny.com

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 :

Page 97: Yii Framework - Aviny.com

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

Page 98: Yii Framework - Aviny.com

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

Page 99: Yii Framework - Aviny.com

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();

Page 100: Yii Framework - Aviny.com

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();

Page 101: Yii Framework - Aviny.com

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();

Page 102: Yii Framework - Aviny.com

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')

Page 103: Yii Framework - Aviny.com

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)

Page 104: Yii Framework - Aviny.com

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')

Page 105: Yii Framework - Aviny.com

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();

Page 106: Yii Framework - Aviny.com

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'=>'[email protected]',

));

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;

Page 107: Yii Framework - Aviny.com

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')

Page 108: Yii Framework - Aviny.com

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')

Page 109: Yii Framework - Aviny.com

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.*',

Page 110: Yii Framework - Aviny.com

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';

Page 111: Yii Framework - Aviny.com

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ضاحشی ثب اؾشفبز اظ فقب وطز ذبنیز

Page 112: Yii Framework - Aviny.com

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ای دبضاشط ضقش ای اؾز و قبز زؾشض

Page 113: Yii Framework - Aviny.com

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);

Page 114: Yii Framework - Aviny.com

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)

Page 115: Yii Framework - Aviny.com

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

{

Page 116: Yii Framework - Aviny.com

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();

}

Page 117: Yii Framework - Aviny.com

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;

}

Page 118: Yii Framework - Aviny.com

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

Page 119: Yii Framework - Aviny.com

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تعریف هی شد : برای

Page 120: Yii Framework - Aviny.com

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).

Page 121: Yii Framework - Aviny.com

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();

Page 122: Yii Framework - Aviny.com

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',

)

);

Page 123: Yii Framework - Aviny.com

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.

Page 124: Yii Framework - Aviny.com

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'),

Page 125: Yii Framework - Aviny.com

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'));

Page 126: Yii Framework - Aviny.com

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)'),

);

}

Page 127: Yii Framework - Aviny.com

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.

Page 128: Yii Framework - Aviny.com

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(

Page 129: Yii Framework - Aviny.com

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 هی تاذ ب کار هی

رد.

Page 130: Yii Framework - Aviny.com

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'),

);

}

}

Page 131: Yii Framework - Aviny.com

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'),

);

}

}

Page 132: Yii Framework - Aviny.com

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;

Page 133: Yii Framework - Aviny.com

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

سفبر بغ ثب یه دطغ القی زض ای اؾز و بغ ث سبیی ی ساس اػطا قز ثبیس حشب زاذ یه

دطغ القی فطاذای قز.

Page 134: Yii Framework - Aviny.com

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

Page 135: Yii Framework - Aviny.com

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اط زؾشطؾی ث یه

Page 136: Yii Framework - Aviny.com

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()

Page 137: Yii Framework - Aviny.com

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.

Page 138: Yii Framework - Aviny.com

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)

Page 139: Yii Framework - Aviny.com

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;

Page 140: Yii Framework - Aviny.com

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') ?>

Page 141: Yii Framework - Aviny.com

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

}

Page 142: Yii Framework - Aviny.com

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تر کیذ ک هب دس ایي هخبل ث ربی کت :

Page 143: Yii Framework - Aviny.com

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.

Page 144: Yii Framework - Aviny.com

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

Page 145: Yii Framework - Aviny.com

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.

Page 146: Yii Framework - Aviny.com

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ب دس یک یب چذ فبکتس هؾخـ گشدد هخلا دس رخیش پشفبیل کبسثش داد ب تعظ

Page 147: Yii Framework - Aviny.com

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...

Page 148: Yii Framework - Aviny.com

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ش پبساهتش اضبفی دس

ربی آى ک آى سا ؾبى دذ.

Page 149: Yii Framework - Aviny.com

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دس پشژ ث عیل

را در پرژ[ استفاد نمایین ب شکل زیر عول هل کین :

Page 150: Yii Framework - Aviny.com

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(

Page 151: Yii Framework - Aviny.com

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

Page 152: Yii Framework - Aviny.com

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(

Page 153: Yii Framework - Aviny.com

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',

Page 154: Yii Framework - Aviny.com

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');

اص آى صبل هی تاین یک و اص سی آى کلاط یب کلاعبی فشصذ آى عبخت )عبخت ؽی(

اعتفبد کین.

Page 155: Yii Framework - Aviny.com

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

Page 156: Yii Framework - Aviny.com

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کذبی ثبلا فبیل

پظ اص ازبم هشصل فق هی تاى تعظ کذ صیش دس یک اکؾي اص تعؼ هسد ظش اعتفبد کشد :

Page 157: Yii Framework - Aviny.com

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لتی تعظ

ایجاد هی شذ ک هربط ب تست براه است:

Page 158: Yii Framework - Aviny.com

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);

Page 159: Yii Framework - Aviny.com

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 صشف

ای ک آدسعبی تلیذ ؽذ هسد پغذ کبسثش الغ ؽذ.

Page 160: Yii Framework - Aviny.com

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ثبیذ دس هغیش افلی دس کبس

Page 161: Yii Framework - Aviny.com

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');

ثبفض ایؼبز ػسی ث قى ظیط ی قز :

Page 162: Yii Framework - Aviny.com

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ضز ث

Page 163: Yii Framework - Aviny.com

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;

Page 164: Yii Framework - Aviny.com

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

Page 165: Yii Framework - Aviny.com

064

Register: ؾبذز ثطب 2ظب

productsس ثب ب ؾبذز دطغ ػسی

PhpMyAdminسؾظ productsؾبذز ثبه اعلافبسی ثب ب

Page 166: Yii Framework - Aviny.com

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(

Page 167: Yii Framework - Aviny.com

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اضز وطز ضع

ؾبذز س

Page 168: Yii Framework - Aviny.com

067

ؾبذز وشطط ی ب

ظوطز آزضؼ ظیطثطضؾی نحز ثطلطاضی اضسجبط ثب ثبه اعلافبسی سؾظ ثب

http://localhost/products/index.php?r=products

Page 169: Yii Framework - Aviny.com

068

registerؾبذز فط ػسیس ثطای طجز وبلای ػسیس ثب ب

وس ظیط ؽبط ی قز و آ ضا وذی ی وی : generateدؽ اظ ظز ویس

Page 170: Yii Framework - Aviny.com

069

ی : ف وذ

Page 171: Yii Framework - Aviny.com

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ای وس یه اظ س

ب چیعی و زض حی ؾبذز فط ث فا ؾبضی كرم زی.

اجش ی سا ؾبضی ضا حصف ز زض اػطای نحیح دطغ كىی ایؼبز راس قس. یقی ث قى ظیط:

Page 172: Yii Framework - Aviny.com

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 ثطضؾی ی وس و شس

Page 173: Yii Framework - Aviny.com

072

ضا یع ثطای ای ی ی فطؾشس و فمظ كرهبر ی ضوضز ثب ی idكب ی زس. زض ض دبضاشط

id كب زاز قز زیط ضوضزب. ی سا ثطای ایif یه else قز و زض نضر بفك ثز

یه دیغب ذغبی بؾت ضا بیف زس. save ف

اػطای دطغ. حب و چیع زضؾز اؼب قس آزضؼ ظیط ضا زض طضط ثبظ ی وی :

index.php?r=products/Registerhttp://localhost/products/

ضا اػطا ی بیس و شیؼ آ ثبیس بس قى ظیط ثبقس : productsزض وشطط registerای آزضؼ شس

حب فط ضا ثب ز مساض اشحب ی وی ظلا :

ثبیس ث نفح ظیط شم قی : submitدؽ اظ ظز زو

Page 174: Yii Framework - Aviny.com

079

مساض آ ثطای ای نفح اضؾب قس id دبضاشط viewقس renderاظ كبس ی قز و چ دؽ

اؾز.

http://localhost/products/index.php?r=products/view&id=7

ی ػس ضا ب ی وی :حشا PhpMyAdminثطای ثطضؾی نحز طجز ضوضز اضز قس زض

كبس ی قز و آذطی ضوضز ب ضوضزی اؾز و ب اضز وطز ای.

Page 175: Yii Framework - Aviny.com

074

و زض ػس ث وبض ضفش ثز ث زی ای و ویس انی ػس ثز زض فط ب بیف زاز idىش : فیس

قز. كس صا ز سیس فط ثبیس زلز وطز و فیس ویس انی زض فط ؽبط ی

Page 176: Yii Framework - Aviny.com

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,

),

Page 177: Yii Framework - Aviny.com

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

Page 178: Yii Framework - Aviny.com

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__);

Page 179: Yii Framework - Aviny.com

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ولاؾب حطف ا ثعضي ثطای ولاؾبی زاذی ثب حطف

Page 180: Yii Framework - Aviny.com

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

Page 181: Yii Framework - Aviny.com

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,

),

),

Page 182: Yii Framework - Aviny.com

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‟]

Page 183: Yii Framework - Aviny.com

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',

Page 184: Yii Framework - Aviny.com

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'=>'[email protected]',

),

صبل دس ش ربی ثشبه هی تاى تعظ کذ صیش ث پبساهتش هسد ظش دعتشعی پیذا کین :

echo Yii::app()->params['paramNam‟];