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' => 'huajian@syncomni.com',
// or email@googleappsdomain.com
'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('kevin@syncomni.com');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);
[转]http://www.cnblogs.com/jinhuawang76/tag/yii/
yii 执行流程的更多相关文章
- yii执行流程
yii执行流程 原文:http://www.cnblogs.com/bluecobra/archive/2011/11/30/2269207.html 一 目录文件 |-framework 框 ...
- yii执行流程简单介绍
1. 用户访问 http://www.example.com/index.php?r=post/show&id=1,Web 服务器执行入口脚本 index.php 来处理该请求. 2. 入口 ...
- yii执行原理
应用执行流程: 浏览器向服务器发送 Http Request | 控制器(protected/controllers) | |---> Action | 创建模型 (Model) | 检查$_P ...
- yii2 beta版 执行流程
yii2 beta版 执行流程 自动加载 1.composer的自动加载 //composer的加载实现了四种方式,可以看看 require(__DIR__ . '/../../vendor/auto ...
- Yii2 源码分析 入口文件执行流程
Yii2 源码分析 入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...
- 第二天 ci执行流程
第二天 ci执行流程 welcome 页面 this this->load 单入口框架index.php 两个文件夹 system application定义 定义常亮路径 载入 codeign ...
- 轻量级前端MVVM框架avalon - 执行流程2
接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...
- [Java编程思想-学习笔记]第4章 控制执行流程
4.1 return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...
随机推荐
- SpringCloud Eureka(注册中心集群)
多个注册中心,其实用不同的配置对应 不同的端口号注册就行了. 注册中心自己也是个服务,看看之前的单个注册中心是怎么样的呢? server: port: 8888 # 服务端口eureka: insta ...
- 解决win7无法打开chm格式文件的问题
解决win7无法打开chm格式文件的问题. (一).简单方法(本人用的这个) 1.打开chm2.win7提示安全问题3.chm无法显示内容4.关闭chm5.右键点击chm,点击“解除锁定”,ok 没 ...
- 小程序:获取input输入的值
wxml <input placeholder='输入你的姓名' value='{{name}}' bindblur='nameblur'></input> js data ...
- java集合(List集合与Map集合的数据转换)
List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 ...
- jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)
1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: load(url,[data],[callba ...
- FineReport中如何实现自动滚屏效果
对于一些特殊的模板,可能为了展示的更加丰富.全面会在一个页面放置很多图表.表格等内容.由于内容过多,超出了浏览器窗口的大小导致内容展示不全的情况.这样我们就需要用到JS滚屏效果来解决,这里主要介绍在F ...
- ciscn2018-pwn-wp
前言 2018全国大学生网络安全竞赛 ,做了2 道题 task_supermarket change_desc 里面调用 realloc 会触发 uaf 利用 uaf 修改 obj->desc_ ...
- Memory map of an object array
Student类: package com.itheima; /* * 自动生成构造方法: * 代码区域右键 -- Source -- Generate Constructors from Super ...
- sql 字段别名里包含特殊字符
select ename employee.name from emp; 在数据库查询时,如果列名的别名里特殊符号,报错. select ename 'employee.name' from emp; ...
- spring boot(17)-@Async异步
验证码的异步机制 上一篇讲过可以用邮件发验证码,通常我们在某网站发验证码时,首先会提示验证码已发送,请检查邮箱或者短信,这就是图中的1和3.然而此时查看邮箱或短信可能并没有收到验证码,往往要过几秒种才 ...