yii 执行流程

应用执行流程:

浏览器向服务器发送 Http Request

    |

  控制器(protected/controllers)

    |

    |---> Action

            |

         创建模型 (Model)

            |

         检查$_POST输入

            |

         渲染视图

            |

         render()第二个参数作为控制器与视图接口参数

            |

            |----> View (protected/views)

                     |

                   使用$this访问控制器的变量(包括layout, widget)



-----------------------------------------------------------------

视图渲染流程:

render($view, $data, $return)

    |

beforeRender()

    |

渲染View文件,调用renderPartial(),要求处理输出结果

    |

    |----> 根据$view得到viewFile文件名

                    |

           renderFile(),要求返回渲染结果,做下一步处理

                    |

                    |-----------> 获取widget的数目

                                         |

                                  从Yii::app()获得render

                                  CWebApplication::getViewRenderer

                                  查询component['viewRenderer'],默认没有配置

                                         |

                                  Then, 调用renderInternal()

                                         |

                                         |---------> require View文件,渲染,根据需要返回渲染结果

                                                          |

                                         |<---------------|

                                         |

                    |<-------------------|

                    |

               处理输出结果processOutput()

                    |

               按照caller参数,返回输出,而不是echo输出

    |<--------------|

    |

渲染layout文件

    |

----------------------------------------------------------------------

加载控制器及其方法:

根据route信息,获得当前控制器

      |

初始化当前控制器,CController::init(),默认为空

      |

执行当前控制器,CController::run()

      |

      |----> 创建action,为空则默认为index

                     |

             得到CInlineAction的实例

                     |

             用父对象执行beforeControllerAction:默认是CWebApplication,直接返回TRUE

                     |

                执行action

                     |----> 备份原来的action

                                 |

                            执行beforeAction()

                                 |

                            runWithParams()----> 实际上是执行CInlineAction->runWithParams()

                                                             |

                                                 在实例中,执行SiteController->actionIndex()

                                                             |

                                                 渲染页面:render('index')

                                                             |

                                 |<--------------------------|

                                 |

                            执行afterAction()

                                 |

                            恢复原来action

                                 |

                     |<----------|

                     |

             用父对象执行afterControllerAction:默认是CWebApplication,为空

       |<------------|

     完成


----------------------------------------------------------------


应用执行流程:

index.php

    |

require_once($yii)

    |

    |------------->yii.php

                    |

                  require(YiiBase.php)

                    |

                    |---------------->YiiBase.php

                                        |

                                      Define YII_XXX global variable

                                        |

                                      Define Class YiiBase

                                        |

                                      Autload Class YiiBase (自动加载类机制)

                                        |

                                      require interface.php

                                        |

                    |<------------------|

                    |

                   define null Class Yii

                    |

    |<--------------|

    |

createWebApplication($config)---------->|

                                        |

                                      YiiBase::createApplication('CWebApplication',$config)

                                        |

                                      Create Instance of CWebApplication

                                        |

                                        |--------->CWebApplication

                                                      |

                                                   CApplication($config)构造函数

                                                      |

                                                      |------>|

                                                           setBasePath

                                                              |

                                                           set path alias

                                                              | 

                                                           preinit() 空方法

                                                              | 

                                                           initSystemHandlers()

                                                              | 

                                                           configure($config) 将配置文件信息保存到Application

                                                              |

                                                           attachBehaviors()

                                                              | 

                                                           preloadComponents() --> 装载在configure($config)中配置需要preload的components

                                                              | 

                                                           init()                                                              | 

                                                      |<------|

                                                      |

                                        |<------------|

                                        |

    |<----------------------------------|

    |

app->run()

    |

    |---->CWebApplication::processRequest()

                      |

                      |----> CWebApplication::runController($route)

                                       |

                                       |---->createController($route)

                                                    |

                                                 如果$route是空,添加默认controller,对于CWebApplication的controller是"site"

                                                    |

                                                 Controller类是SiteController,require该类文件

                                                    |

                                                 如果该类是CController的子类,修改id[0]为大写,创建该类的实例

                                                    |

                                                    |---->CSiteController

                                                              |

                                                          extends from Controller 这是客户化控制器的基本类,存在于components下

                                                          定义了页面的通用布局

                                                              |

                                                          使用CController构造函数创建对象CSiteController,具体初始化数据见yii-1.png

                                                              |

                                                    |<--------|

                                                备份$this->_controller

                                                $this->_controller = $controller

                                                    |

                                                 调用控制器类的init()方法,默认为空

                                                    |

                                                 调用控制器类的run()方法,默认为CController的run()

                                                    |

                                                    |---->createAction()

                                                              |

                                                           if($actionID==='') $actionID设置为$this->default ("index")

                                                              |

                                                              |Yes

                                                              |----> return CInlineAction($this, $actionID)

                                                              |No              |

                                                           从Map创建           |

                                                              |      执行当前类CInlineAction的父类CAction的构造函数

                                                              |      设置_controller和$id

                                                              |                |

                                                              |<---------------|

                                                              |

                                                              |

                                                           这里得到一个CAction的实例

                                                              |

                                                           $this->getModule()作为parent,为空则使用Yii::ap

                                                              |

                                                           $parent->beforeControllerAction() ??

                                                              | 

                                                            $this->runActionWithFilters($action,$this->filters());

                                                              | 

                                                            $parent->afterControllerAction($this,$action);

                                                    |<--------|

                                                    |

                                                  恢复原来的$oldController

                                       |<-----------| 

                                       |

                       |<--------------|

                       |

                  End of processRequest()

                       |

    |<-----------------|

    |

End of app->run()

------------------------------------------------------------


获取控制器和方法的ID

转载:http://code.dimilow.com/how-to-get-current-controller-name-and-action-name-in-yii/


How to get current controller name and action name in Yii

By Dimi Low on July 7th, 2010 (6 responses)

To get current controller name/id inside your controller, or view
$controllerId = Yii::app()->controller->id;
//or
$controllerId = $this->getId();

To get current action name/id being executed, if you are inside beforeAction() or afterAction(), use the received CAction argument
//inside beforeAction or afterAction
public function beforeAction($action)
{
$actionId = $action->id;
...
or just elsewhere inside your controller
$actionId = $this->getAction()->getId();

 

----------------------------------------------------

 

使用YiiMailMessage发送邮件:

安装yii-mail到protected/extension下

配置protected/config/main.php,如下
'import' => array(
......
'application.extensions.yii-mail.*',
),

......
'components' => array(
'mail' => array(
'class' => 'application.extensions.yii-mail.YiiMail',
'transportType' => 'smtp', /// case sensitive!
'transportOptions' => array(
'host' => 'mail.syncomni.com',
'username' => '[email protected]',
// or [email protected]
'password' => 'Sitbwp4m2w',
// 'port' => '465',
// 'encryption' => 'ssl',
),
// 'viewPath' => 'application.views.mail',
'logging' => true,
'dryRun' => false
),
),
发送邮件
// 发送电子邮件
$message = new YiiMailMessage;
$message->setSubject($model->notice_subject);
$message->setBody($model->notice);
$message->setTo('[email protected]');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);

 

 

 

[转]http://www.cnblogs.com/jinhuawang76/tag/yii/

你可能感兴趣的:(yii)