27 کىتزلز ومًدار ارث بزی َای کىتزلزَا : معزفی کىتزلز : فبیُ وٙشطِط ٞب زض قبذٝ protected/controllers لطاض ٔی ٌیط٘س. زض اثشسای قطٚؿ ثط٘بٔٝ یه ٕ٘ٛ٘ٝ اظ وٙشطِط سٛؾظ Bootstrap یقٙی فبیُ yiiBase.php ؾبذشٝ ٚ ؾذؽ اػطا ٔی قٛز. ٞط وٙشطِط زاضای یه ٘بْ ٔٙحهط ثٝ فطز یب ControllerID ٔی ثبقس. وٙشطِط قبُٔ سقسازی اظ اوكٗ ٞب ٔی ثبقس وٝ ثط اؾبؼ زضذٛاؾشٟبی وبضثط وبض ذبنی ضا ا٘ؼبْ ٔی زٞٙس. وٙشطِط اضعطیك اوكٗ ٞب، ػطیبٖ زازٜ ثیٗ ٔسَ ٞب ٚ ٚیٛٞب ضا ٔسیطیز ٔی وٙس. Action زض ٚالـ ٔشس ٔٛػٛز زض وٙشطِط اؾز وٝ حشٕب ایٗ ٔشس ثب وّٕٝ action قطٚؿ ٔیكٛز.وبضثط زض فطاذٛا٘ی ٞبیف وّٕٝ action ضا شوط ٕ٘ی وٙس ٔظُ : www.hostname.com/index.php?r=site/view CComponent CBaseController CWidget CController Controller (components Folder) SiteController (controllers Folder)28 زض ایٗ ٔظبَ وٙشطِط site ٚ اوكٗview فطاذٛا٘ی ٔیكٛ٘س ِٚی ٘بْ ٔشس زض انُ actionView اؾز وٝ وّٕٝ action آٖ شوط ٕ٘ی ٌطزز ٚ ایٗ ثبفض افعایف أٙیز ٘یع ٔی قٛز. ظیطا وٝ وبضثط ٔؿشمیٕب ٘بْ فبیُ ضا ٔشٛػٝ ٕ٘ی قٛز. ٘حٜٛ سقطیف یه اوكٗ ػسیس : class UpdateAction extends CAction { public function run() { // place the action logic here } } اوكٗ ٔی سٛا٘س دبضأشطٞبیی ضا ٞٓ زاقشٝ ثبقس وٝ ایٗ دبضأشطٞب ذٛز وبض ٔی ثبقٙس ٚ ٔمساض آٟ٘ب سٛؾظ GET_$ اظ وبضثط زضیبفز ٔی قٛ٘س. پارامتزَای خًدکار اکطه یه ٔشس اوكٗ ٔی سٛا٘س دبضأشٟبیی ضا ثطای آٖ سقطیف ٕ٘ٛز وٝ ٔمبزیط آٟ٘ب ضا اظ عطیك GET_$ اظ وبضثط زضیبفز ٕ٘بیس.زض حبِشی وٝ ٘رٛاٞیٓ اظ دبضأشطٞب ذٛزوبض اؾشفبزٜ ٕ٘بییٓ اٌط یه اوكٗ ثب ٘بْ create ایؼبز ٕ٘بییٓ وٝ زض وٙشطِط PostController سقطیف قسٜ ثبقس ٚ زاضای زٚ دبضأشط language ٚ categoryثبقس وٝ ٔمبزیط آٟ٘ب ضا اظ ٚضٚزی ثٍیطز وس ٘ٛیؿی عٛا٘ی ظیط ضا ذٛاٞیٓ زاقز : class PostController extends CController { public function actionCreate() { if(isset($_GET['category'])) $category=(int)$_GET['category']; else throw new CHttpException(404,'invalid request'); if(isset($_GET['language'])) $language=$_GET['language']; else $language='en'; // ... fun code starts here ...29 } } حبَ ثب اؾشفبزٜ اظ دبضأشطٞبی ذٛزوبض ٔؼسزا ٕٞیٗ وٙشطِط ضا سقطیف ٔی ٕ٘بییٓ. وٝ زاضای وس ٘ٛیؿی ؾبزٜ ٔی ثبقس. ثٝ قىُ ظیط class PostController extends CController { public function actionCreate($category, $language='en') { $category=(int)$category; // ... fun code starts here ... } } سقساز دبضأشطٞب ٚ ٘بْ آٟ٘ب ثبیس زلیمب ثب آٖ چیعی وٝ وبضثط ٚاضز ٔی وٙس سغبثك زاقشٝ ثبقس ثطای وس ثبا زضذٛاؾشی ٔظُ وس ظیط لبثُ لجَٛ اؾز: www.hostname.com/index.php?r=Post/categoory=1&language=fa اٌط وبضثط زضذٛاؾشی ثسٞس وٝ اظ ایٗ اٍِٛ یب اٍِٛٞبی ٔٛضز لجَٛ ایٗ اٍِٛ دیطٚی ٘ىٙس یه ذغبی ضخ 400 ٔی زٞس. دبضأشط language ثبا زاضای یه ٔمساض دیف فطو اؾز 'language='en$ ٚ زض نٛضسی وٝ وبضثط ایٗ دبضأشط ضا اضؾبَ ٘ىٙس ذغبیی ضخ ٕ٘ی زٞس ٚ ٔمساض دیف فطو ثطای آٖ زض ٘ؾط ٌطفشٝ ٔی قٛز. أب چٖٛ category ٔمساض دیف فطو ٘ساضز زضذٛاؾشی وٝ دبضأشط category زض آٖ ٘جبقس ثبفض ثطٚظ ذغب ذٛاٞس قس. class PostController extends CController { public function actionCreate(array $categories) { // Yii will make sure $categories be an array } } زض ایٗ حبِز وّٕٝ وّیسی arrayثبیس ٘ٛقشٝ قٛز. وبضثط ٔی سٛا٘س ثب ['GET['categories_$ وبض وٙس وٝ یه ضقشٝ فبزی اؾز ِٚی ٔیشٛاٖ آٖ ضا ثٝ یه آضایٝ سجسیُ وطز ٚ اظ فٙبنط آٖ آضایٝ اؾشفبزٜ ٕ٘ٛز. ٚلشی وٝ وبضثط یه اوكٗ ٔظُ XYZ ضا زضذٛاؾز ٔی وٙس، وٙشطِط یىی اظ وبضٞبی ظیط ضا ا٘ؼبْ ٔی زٞس : Method-based action : یقٙی ایٙىٝ ٔشس actionXYZ ضا زض نٛضر ٚػٛز فطاذٛا٘ی ٔی وٙس.91 Class-based action : یقٙی ایٙىٝ یه ٕ٘ٛ٘ٝ اظ واؼ XYZ ضا زض نٛضر ٔٛػٛز ثٛزٖ واؼ زض action class map ایؼبز ٔی وٙس. ٚ ؾذؽ اوكٗ ضا فطاذٛا٘ی ٔی وٙس. Call missingAction : یقٙی ایٙىٝ ثٝ عٛض دیف فطو یه ذغبی HTTP 404 ضا سِٛیس ٔی وٙس. اٌط وبضثط ٞیچ اوكٗ ٔكرهی ضا زضذٛاؾز ٘سٞس اوكٗ defaultActionاػطا ذٛاٞس قس.defaultAction ضا ثٝ فٙٛاٖ یه ٔشغیط ٔی سٛاٖ زض اثشسای واؼ وٙشطِط سقییٗ ٕ٘ٛز. وٙشطِط ٕٔىٗ اؾز وٝ ثرٛاٞس لجُ ٚ یب ثقس اظ اػطای یه اوكٗ فیّشطٞبیی ضا اػطا وٙس. پارامتزَای عمًمی قابل تعزیف در کىتزلز : سقطیف لبِت :public $layout ٔی سٛاٖ لبِت دیف فطو ثطای اؾشفبزٜ زض ٚیٛٞبی ٔٛضز اؾشفبزٜ زض ایٗ وٙشطِط ضا سقییٗ ٕ٘ٛز وٝ ثٝ عٛض دیف فطو main ٔی ثبقس. اٌط ٔمساض آٖ false سقطیف قٛز ٞیچ لبِجی اؾشفبزٜ ٕ٘ی قٛز. ٔظبَ : public $layout='//layouts/mylayout; اٌط وٙشطِط زض یه ٔبغَٚ لطاض زاقشٝ ثبقس ٔی سٛاٖ ثطای سقییٗ لبِت اظ زؾشٛض CWebModule::layout module layout اؾشفبزٜ ٔی قٛز. سقطیف اوكٗ دیف فطو : 'public $defaultAction='index اوكٗ دیف فطو ثطای اػطا ٔكرم ٔی قٛز. زض ایٙهٛضر اٌط زض، زضذٛاؾز وبضثط اوكٗ ٔكرم ٘كٛز ایٗ اوكٗ دیف فطو اػطا ٔی قٛز. اِجشٝ اظ اثشسا ٔمساض آٖ 'index' اؾشٛ ثبفض اػطای اوكٗ actionIndex ٔی قٛز.ٔظبَ : public $defaultAction='myAction'; متذَای قابل استفادٌ در کىتزلز : public function init)( وٙشطِط ضا ٔمساض زٞی اِٚیٝ ٔی وٙس. ایٗ ٔشس سٛؾظ application ٚ لجُ اظ قطٚؿ اػطای وٙشطِط اػطا ٔی قٛز. ٕٔىٗ اؾز قٕب ایٗ ٔشس ضا override وٙیس سب ثشٛا٘یس سٙؾیٕبر دیف اظ اػطای وٙشطِط ضا افٕبَ ٕ٘بییس.90 public function filters)( ایٗ ٔشس سٙؾیٕبر فیّشط ضا ثط ٔی ٌطزا٘س. ایٗ ٔشس آضایٝ ای اظ ٔمبزیط فیّشط ضا ثط ٔی ٌطزا٘س وٝ ٞط وساْ اظ فٙبنط آضایٝ ٔطثٛط ثٝ ٞط یه اظ فیّشط ٞب ٞؿشٙس. وٙشطِط ٕٔىٗ اؾز وٝ ثرٛاٞس لجُ ٚ یب ثقس اظ اػطای یه اوكٗ فیّشطٞبیی ضا اػطا وٙس. فیّشط ٞب ٔی سٛا٘ٙس لجُ ٚ یب ثقس اظ زضذٛاؾز ٚ یب دبؾد ثٝ وبضثط اػطا قٛ٘س ٚ ٕٔىٗ اؾز ػّٛی اػطای یه اوكٗ ضا ثٍیط٘س. زض نٛضر ِعْٚ فیّشط ٞب ٔی سٛا٘ٙس زض یه سطسیت ذبل اػطا قٛ٘س. زض ایٙهٛضر اٌط زض ٞط ٔطػّٝ ای اظ اػطا ٞط یه اظ فیّشط ٞب ٔمساض true ضا ثط ٌطزا٘س ثمیٝ فیّشطٞب ٚ اوكٗ ٞب اػطا ٘رٛاٞٙس قس. فیّشطٞب ٔی سٛا٘ٙس ثٝ نٛضر یه قی ؾبذشٝ قسٜ اظ ضٚی یه واؼ ٔؼعا ثبقٙس ٚ یب ثٝ نٛضر ٔشسٞبی سقطیف قسٜ زض واؼ وٙشطِط. فیّشط ٞب ثب override وطزٖ ٔشس filters ثٝ قىُ ظیط اػطا ٔی قٛ٘س. ٔظبَ :
  array(
      'accessControl - login',
      'ajaxOnly + search',
array(
          'COutputCache + list',
'duration'=>300,
      ),
  )
3زض ٔظبَ ثبا فیّشط سقطیف قسٜ اؾز وٝ فجبضسٙس اظ accessControl, ajaxOnly, COutputCache زٚ فیّشط اَٚ یقٙی ,accessControl, ajaxOnly ثط اؾبؼ ٔشس ؾبذشٝ قسٜ ا٘س. وٝ ٔشس آٟ٘ب زض واؼ CController سقطیف قسٜ اؾز وٝ ثٝ فیّشط وطزٖ ٔشس ٞب زض واؼ وٙشطِط اقبضٜ ٔی وٙٙس. زض حبِی وٝ ؾٛٔیٗ فیّشط اظ ٘ٛؿ قی اؾز وٝ واؼ آٖ system.web.widgets.COutputCache ٔی ثبقس ٚ دبضأشط duration آٖ ثطاثط ٔمساض 300 لطاض ٌطفشٝ اؾز. ٔظبَ زیٍطی ثٝ قىُ ظیط اؾز : class PostController extends CController { ...... public function filters() { return array( 'postOnly + edit, create', array(92 'application.filters.PerformanceFilter - edit, create', 'unit'=>'second', ), ); } } وس ثبا زٚ فیّشط ضا سقطیف ٔی ٕ٘بیس. ٔشس فیّشط postOnly ٚ واؼ PerformanceFilter– ٔؿیط لطاض ٌیطی ایٗ واؼ زض ٔؿیط application.filters.PerformanceFilter اؾز وٝ واؼ فیّشط ٔٛضز ٘ؾط زض فبیُ PerformanceFilter.php لطاض زاضز. وٝ زاضای یه property ثب ٘بْ unit اؾز وٝ ٔمساض second ثطای آٖ اضؾبَ ٔی قٛز. فٍّٕط + : ٔكرم ٔی وٙس وٝ ایٗ فیّشط ثطای وسأیه اظ اوكٗ ٞب اػطا قٛز. زض ٔظبَ ثبا اوكٗ postOnly ثبیس ثطای اوكٗ ٞبی create ٚ edit اػطا قٛز. فٍّٕط - : ٔكرم ٔی وٙس وٝ ایٗ فیّشط ثبیس ثطای وسأیه اظ اوكٗ ٞب اػطا ٘كٛز. زض ٔظبَ ثبا فیّشط PerformanceFilter ثطای ٕٞٝ اوكٗ ٞب ثٝ ػع create ٚ edit ثبیس اػطا قٛز. ٘ىشٝ : اٌط – یب + زض فیّشط ٔكرم ٘كٛز آٖ فیّشط ثطای ٕٞٝ اوكٗ ٞب اػطا ٔی قٛز. ثطای فیّشطٞبیی وٝ ثط اؾبؼ ٔشس ؾبذشٝ قسٜ ا٘س یه ٔشس ثب ٘بْ filterXYZ ثٝ نٛضر )filterXYZ($filterChain سقطیف ٔی قٛز وٝ ٘بْ ایٗ فیّشط XYZ اؾز. ٘ىشٝ : زاذُ ٔشس فیّشط ثبیس وس )($filterChain->run حشٕب ٘ٛقشٝ قٛز سب ظ٘ؼیطٜ اػطایی ازأٝ دیسا وٙس ٌٚط٘ٝ ظ٘ؼیطٜ اػطازض ٕٞیٗ ٘مغٝ دبیبٖ ٔی دصیطز. ٘ىشٝ : اٌط ٔمساض ثطٌكشی یه ٔشس فیّشط false ثبقس اوكٗ ٞبی ٔطثٛعٝ اػطا ٘رٛاٞٙس قس. فیّشطٞب ٔی سٛا٘ٙس ثٝ ٌٛ٘ٝ ای سقطیف قٛ٘س وٝ سٟٙب ظٔب٘ی اػطا قٛ٘س وٝ یه اوكٗ ذبل اػطا ٔی قٛز. ثطای فیّشطٞبی ثط اؾبؼ ٔشس ایٗ وبض ثٝ ٚؾیّٝ فٍّٕطٞبی + ٚ – زض سقطیف فیّشط ا٘ؼبْ ٔی قٛز. فٍّٕط + ٔكرم ٔی وٙس وٝ فیّشط سٟٙب ظٔب٘ی اػطا قٛز وٝ یه فیّشط ثٝ ذهٛل فطاذٛا٘ی قٛز زض حبِی وٝ فٍّٕط – ثٝ ایٗ ٔقٙی اؾز وٝ فیّشط سٟٙب ظٔب٘ی اػطا ٔی قٛز وٝ ایٗ اوكٗ زض ٔیبٖ اوكٗ ٞبی زضذٛاؾز لطاض ٘ساضز.ثطای اوكٗ ٞبی ثط اؾبؼ قی فٍّٕط + ٚ – ٘بْ واؼ ضا ز٘جبَ ٔی وٙٙس. فیّشط ٞب ثٝ زٚ زؾشٝ سمؿیٓ ٔی قٛ٘س :99 inline filter -1 : وٝ فیّشطٞبی ثط اؾب ٔشس ٞؿشٙس. ٚ اٍِٛی سقطیف آٟ٘ب ثٝ قىُ ظیط اؾز: FilterName[ +|- Action1, Action2, ...] وٝ فٍّٕطٞبی + ٚ – ٔكرم ٔی وٙٙس وٝ وساْ اوكٗ ثبیس/٘جبیس فیّشط ٌصاضی قٛز. class-based filter -2 : وٝ فیّشط ٔطثٛعٝ ثٝ ٚؾیّٝ یه قی ؾبذشٝ قسٜ اظ ضٚی واؼ سقطیف ٔی قٛز. ایٗ واؼ اظ واؼ 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 } } ٘حٜٛ سقطیف ایٍٙٛ٘ٝ فیّشط ثٝ قىُ ظیط اؾز :
array(
      'FilterClass[ +|- Action1, Action2, ...]',
      'name1'=>'value1',
'name2'=>'value2',
...
  )
'name1'=>'value1' زض ایٗ ؾبذشبض ٔمبزیط property ٞبی فیّشط ضا ٔكرم ٔی وٙٙس. ٘ىشٝ : ثطای اضص ثطی فیّشطٞب اظ یىسیٍط یه واؼ فطظ٘س ثبیس ثب واؼ ٚاِس ذٛز ازغبْ قٛز وٝ ایٗ وبض ٔی سٛا٘س سٛؾظ سٛاثقی ٔظُ array_merge ا٘ؼبْ ٌیطز. public function actions)(94 ایٗ ٔشس ِیؿشی اظ اوكٗ ٞبی ٔٛػٛز زض واؼ ذبضػی ضا ثط ٔی ٌطزا٘س. ایٗ ٔشس قبُٔ آضایٝ ای اؾز وٝ فٙبنط آٖ اوكٗ ٞب ٚ واؾٟبی آٟ٘ب ضا ٔكرم ٔی وٙٙس. ٔظبَ : 'edit'=>'application.controllers.article.EditArticle' زض ایٗ ٔظبَ اوكٙی ثب ٘بْ edit زض واؾی ثٝ ٔؿیط 'application.controllers.article.EditArticle' فطاذٛا٘ی ٔی قٛز ٚ اظ ایٗ ثٝ ثقس زض ایٗ واؼ لبثُ فطاذٛا٘ی ٚ اؾشفبزٜ اؾز.ٕٞچٙیٗ ٔی سٛاٖ دبضأشطٞبیی ضا ٘یع ثٝ اوكٗ فطاذٛا٘ی قسٜ اضؾبَ ٕ٘ٛ. ٔظبَ :
  return array(
      'action1'=>'path.to.Action1Class',
'action2'=>array(
          'class'=>'path.to.Action2Class',
'property1'=>'value1',
          'property2'=>'value2',
      ),
  );
زض ٔظبَ ثبا action2 سقطیف ٔی قٛز وٝ ٔؿیط آٖ 'path.to.Action2Class' اؾز ٚ زٚ property ٘یع ٕٞطاٜ ثب فطاذٛا٘ی اضؾبَ ٔی قٛز. یىی زیٍط اظ وبضثطزٞبی ایٗ ٔشس ایٗ اؾز وٝ اٌط یه واؼ وٙشطِط اظ واؼ وٙشطِط ٔب ٔكشك قٛز سٛؾظ ایٗ ٔشس ٔی سٛا٘س اوكٗ ٞبی واؼ ٚاِس ذٛز ضا فطاذٛسٙی ٕ٘بیس. ٘ىشٝ : ثطای اضص ثطی اوكٗ ٞب اظ یىسیٍط یه واؼ فطظ٘س ثبیس ثب واؼ ٚاِس ذٛز ازغبْ قٛز وٝ ایٗ وبض ٔی سٛا٘س سٛؾظ سٛاثقی ٔظُ array_merge ا٘ؼبْ ٌیطز. قٕب ٕٞچٙیٗ ٔی سٛا٘یس اوكٗ ٞب ضا اظ یه action providerٔظُ CWidget::actions فطاذٛا٘ی ٕ٘بییس. ٔظبَ :
return array(
...other actions...
// import actions declared in ProviderClass::actions()
// the action IDs will be prefixed with 'pro.'
'pro.'=>'path.to.ProviderClass',
// similar as above except that the imported actions are
values
'pro2.'=>array(          
'class'=>'path.to.ProviderClass',95
'action1'=>array(
'property1'=>'value1',
),
'action2'=>array(
'property2'=>'value2',
),
),
)
زض ٔظبَ ثبا ٔب action providers ضا اظ ؾبیط سقبضیف اوكٗ ػسا وطزٜ ایٓ ثطای action providers ٞب ثبیس ثطای سقطیف اظ یه ٘مغٝ اؾشفبزٜ ٕ٘بییٓ ثٙبثط ایٗ ٔظا pro2.action1 ثٝ فٙٛاٖ action1 قٙبذشٝ ٔی قٛز وٝ زض ProviderClass سقطیف قسٜ اؾز. public function behaviors)( ِیؿشی اظ ضفشبضٞب ضا وٝ وٙشطِط ثبیس اظ ذٛز ٘كبٖ زٞس ثط ٔی ٌطزا٘س. ایٗ ٔشس قبُٔ آضایٝ ای اؾز وٝ زض آٖ ٘بْ ضفشبض ٚ ٔمساض آٖ ٔكرم ٔی قٛز ٔظُ name=>behavior. ٞط ضفشبض ٔی سٛا٘س یه ضقشٝ ٔقطف ٘ٛؿ ضفشبض واؼ ثبقس یب یه آضایٝ ثب ؾبذشبض ظیط زاقشٝ ثبقس :
'behaviorName'=>array(
     'class'=>'path.to.BehaviorClass',
     'property1'=>'value1',
'property2'=>'value2',
)
زض ٔظبَ ثبا 'behaviorName' یه ضفشبض اؾز وٝ زض واؾی ثب آزضؼ 'path.to.BehaviorClass' ٔقطفی ٔی قٛز ٚ زٚ دبضأشط ثب ٔمبزیط ٔكرم قسٜ ضا زضیبفز ٔی وٙس. سٛػٝ وٙیس وٝ واؼ behavior ثبیؿشی اظ ٚاؾظ IBehavior اؾشفبزٜ وٙس ٚ یب اظ واؼ CBehavior اضص ثطی ٕ٘بیس. ضفشبضٞبی سقطیف قسٜ زض وٙشطِط زض ظٔبٖ ؾبذز ٕ٘ٛ٘ٝ وٙشطِط سٛؾظ application ثٝ واؼ وٙشطِط ّٔحك ٔی قٛ٘س. سٛضیحبر سىٕیّی زض ٔٛضز ضفشبضٞب ضا ٔی سٛاٖ زض ضإٞٙبی قی ٌطایی زض PHP ٚ یب زض واؼ CComponent ٔكبٞسٜ ٕ٘ٛز. public function accessRules)(96 ایٗ ٔشس فیّشطٞبی زؾشطؾی وبضثط ثٝ اوكٗ ٞبی وٙشطِط ضا ٔكرم ٔی وٙس. ثٝ فٙٛاٖ ٔظبَ ٔكرم ٔی وٙس وٝ وساْ وبضثط ٔؼبظ ثٝ اػطای وساْ اوكٗ ٔی ثبقس یب ٕ٘ی ثبقس. ثطای ایٗ وٝ ٞط وبضثطی ٘شٛا٘س ثب ٚاضز وطزٖ ٞط آزضؾی ٚاضز آٖ نفحٝ قٛز اظ ایٗ لؿٕز اؾشفبزٜ ٔی قٛز. ٔظا وبضثطی وٝ ٚاضز ؾبیز ٘كسٜ یقٙی login ٘ىطزٜ ٕ٘ی سٛا٘س وٙشطِط Post ضا اػطا وٙس. ثطای ٞط یه یب چٙس اوكٗ ٔی سٛاٖ یه آضایٝ ػسا سكىیُ زاز ٚ ٘حٜٛ زؾشطؾی وبضثطا٘ی وٝ ٔی سٛا٘ٙس اظ آٖ اؾشفبزٜ وٙٙس ضا ٔكرم وطز. اظ وبضاوشط * ثطای ٔقطفی وطزٖ ٕٞٝ وبضثطاٖ ٚ اظ وبضاوشط @ ثطای ٔقطفی وبضثطا٘ی وٝ ٚاضز ؾبیز قسٜ ا٘س اؾشفبزٜ ٔی وٙیٓ ٕٞچٙیٗ اظ فأی ؟ ثطای وبضثطاٖ ٘بقٙبؼ اؾشفبزٜ ٔی قٛز. ٞط ٔسذُ آضایٝ ثطای ایٗ ٔشس ثٝ قىُ ظیط سقطیف ٔی قٛز : array('deny or allow', 'actions'=>array('action1','action2',…), 'users'=>array('@ or *') ), اثعاض gii زض اؾشفبزٜ اظ اثعاض Crud generator ثبفض ٔی قٛز وٝ ٔسذّی ثب قىُ ظیط ایؼبز ٔی وٙس وٝ ثطای اػطای اوكٗ ٞبی وبضثط ثبیس آٖ ضا اناح ٕ٘ٛز ٌٚط٘ٝ اوكٗ ٞبی وبضثط اػطا ٘رٛاٞٙس قس. array('deny', // deny all users 'users'=>array('*'), ), زض ایٗ اوكٗ ٕٞچٙیٗ ٔی سٛاٖ دبضأشطٞبی زیٍطی ٔظُ Ip, Roles, Controllers, Verbs, Expression ٚ غیطٜ ضا ٘یع اؾشفبزٜ وطز ثٝ فٙٛاٖ ٔظبَ اظ Ips ٔی سٛاٖ اؾشفبزٜ وطز سب وبضثطا٘ی ثب Ip ٔكرم اػبظٜ اؾشفبزٜ اظ ؾبیز ضا زاقشٝ ثبقٙس یب ٘ساقشٝ ثبقٙس. ثطای ٔسیطیز ٌطٟٚٞب ٘یع اظ Roles اؾشفبزٜ ٔی قٛز وٝ ثطای سٛضیحبر ثیكشط ثٝ ٚیىی دسیب ثرف RBAC ٔطاػقٝ ٕ٘بییس.97 ضٚـ زیٍط ایٗ وبض سقطیف یه قطط اؾز ٔظُ: array('allow', 'actions'=>array('admin'), 'expression'=> 'Yii::app()->user->group == 3', ), public function run($actionID) ایٗ ٔشس ٘بْ یه اوكٗ ضا ٌطفشٝ ٚ آٖ ضا اػطا ٔی وٙس. فیّشطٞبی اوكٗ ٔٛضز ٘ؾط ٘یع اػطا ذٛاٞٙس قس. اٌط اوكٗ ٔٛضز ٘ؾط دیسا ٘كس ٚ یب ٘بْ اوكٗ نحیح ٚاضز ٘كسٜ ثبقس یه CHttpException ضخ ٔی زٞس. public function runActionWithFilters($action,$filters) ایٗ ٔشس یه فیّشط ضا ثب یه فیّشط ٔكرم قسٜ اػطا ٔی وٙس. یه ظ٘ؼیطٜ فیّشط زض ایٗ ٔطحّٝ ایؼبز قسٜ ٚ ؾذؽ اوكٗ ٔٛضز ٘ؾط اػطا ٔی قٛز. public function runAction($action) ایٗ ٔشس یه اوكٗ ضا دؽ اظ افٕبَ سٕبٔی فیّشطٞب ٔطسجظ ثب ایٗ اوكٗ اػطا ٔی وٙس. public function createAction($actionID) ایٗ ٔشس یه ٕ٘ٛ٘ٝ اظ اوكٗ ٔقطفی قسٜ ضا سِٛیس ٔی وٙس. ایٗ اوكٗ ٔی سٛا٘س یه اوكٗ inline یقٙی سقطیف قسٜ زض زاذُ ٕٞیٗ واؼ وٙشطِط ثبقس ٚ یب یه اوكٗ object یقٙی سقطیف قسٜ زض واؼ ذبضػی ٚ ؾذؽ ٕ٘ٛ٘ٝ ؾبظی قسٜ ثبقس. public function missingAction($actionID) ایٗ ٔشس ثطضؾی ٔی وٙس وٝ آیب اوكٗ ٔقطفی قسٜ ٔٛػٛز ٔی ثبقس یب ذیط ٚ زض نٛضسی وٝ ٔٛػٛز ٘جبقس یه ذغب نبزض ٔی وٙس. public function getRoute)( ایٗ ٔشس ضقشٝ سمبضبی ػبضی ثٝ قىُ module ID, controller ID and action ID ضا ثط ٔی ٌطزا٘س. public function getAction)( ایٗ ٔشس ٘بْ اوكٗ فقبَ ضا ثط ٔی ٌطزا٘س. زض نٛضسی وٝ ٞیچ اوكٗ فقبِی ٚػٛز ٘ساقشٝ ثبقس ٔمساض null ضا ثط ٔی ٌطزا٘س.