Thinkphp框架感悟(一)
一、assign()
/** * 分析:
* 此处是Controller类里面的assign方法,我们一般写的控制器所调用的assign方法就是调的这个。
* 而这个方法就干了三件事:1、获取传过来的$name和$value。2、当前对象调用view类里的assign方法并传入$name和$value。3、传给返回当前对象。
* 这个view是一个变量,也是一个对象。在前几行先是声明了view这个变量,然后把view类实例化成view对象“写在了构造函数里”。
* 其中的return $this 是返回了当前对象,目的是为了连续操作,类似于tp框架里的sql连续操作。(但我目前还没看到哪里对assign方法用到了连续操作)
*/
protected function assign($name,$value='') {
$this->view->assign($name,$value);
return $this;
}
/** * 分析:
* 此处是view类中的assign方法,被controller中的view对象调用。
* 首先判断$name是否为一个数组,
* 如果是一个数组,则将它赋值个给tvar,因为tvar是空数组,所以tvar就是$name.
* 如果不是一个数组,则将tvar变成一个二维数组,其中的某一个键值对来放$name和$value,如果有新的$name和$value则继续放到这个二维数组里
* 这里这个tVar会在之后用到(display()函数内还会还继续操作view对象)
*
* 所以在应用中,我们不能在一个方法里对assign传入两个相同的$name,应用这样的话后一个$value会覆盖前一个$value
*/
public function assign($name,$value=''){//下面的tVar是一个数组
if(is_array($name)) {//判断$name是否维数组
$this->tVar = array_merge($this->tVar,$name);//array_merge将两个数组合为一个数组,此处之所以是$this->tVar,我估计应该是强调这个tVar是本对象内的tVar
}else {
$this->tVar[$name] = $value;
}
}
二、display()
这个函数看的不是很懂,日后有机会一定深入探究
/**
* 模板显示 调用内置的模板引擎显示方法,
* @access protected
* @param string $templateFile 指定要调用的模板文件
* 默认为空 由系统自动定位模板文件
* @param string $charset 输出编码
* @param string $contentType 输出类型
* @param string $content 输出内容
* @param string $prefix 模板缓存前缀
* @return void
*
* 分析:
* 此处是父控制器controller中的display方法。
* 有五个可选传入参数
* 这个方法的作用是调用view对象的display方法,并传入5个可选参数。(一般我用display时是不传参数的)
*/
protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
$this->view->display($templateFile,$charset,$contentType,$content,$prefix);
}
/** * 这是view对象中的display方法。
* 这个方法一共实现了两个步骤:1、调用当前view对象的fetch方法获取并解析模板(html页面)内容,将其赋值给$content。2、调用当前对象的render方法输出模板。
*/
public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
G('viewStartTime');
// 解析并获取模板内容
$content = $this->fetch($templateFile,$content,$prefix);
// 输出模板内容
$this->render($content,$charset,$contentType);
}
/** * 这是view对象中的display方法。
* 这个方法一共实现了两个步骤:1、调用当前view对象的fetch方法获取并解析模板(html页面)内容,将其赋值给$content。2、调用当前对象的render方法输出模板。
*/
public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
G('viewStartTime');
// 解析并获取模板内容
$content = $this->fetch($templateFile,$content,$prefix);
// 输出模板内容
$this->render($content,$charset,$contentType);
} 其中:fetch方法显示自动定位了模板路径,然后利用之前assign方法得到的tVar数组,来解析模板,将所要替换的标签替换。最终将解析完的模板转化成一个字符串。
之后render方法再将之前得到的模板字符串echo出来。
(这fetch和render函数的大体步骤差不多如此,但里面还有很多细节我没有看懂,有待细究)。
Thinkphp框架感悟(一)的更多相关文章
- Thinkphp框架感悟(二)
这次主要分析一下I方法 /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post ...
- 攻城记:Thinkphp框架的项目规划总结和踩坑经验
一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...
- ThinkPHP框架的一些基础应用
这是俺滴师傅给俺传授了的知识,特在此分享. TP框架,做PHP开发的都应该有所耳闻.下面,我们就来说说入口文件的生成: 创建新项目时,首先,在目录文件下创建一个新的文件夹.然后将Thinkphp框架文 ...
- 关于在BAE上部署ThinkPHP框架的问题
现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...
- 番外一:关于thinkphp框架下的文件导入路径问题
总的来说,要使在thinkphp框架下面HTML导入的图片.css文件和js文件有效,只有两种方法:(1)使用绝对路径:(2)在项目目录下创建新目录Public,把所有的img文件夹.js文件夹和cs ...
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
[PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403
- thinkphp框架下404页面设置
404页面即系统在找不到请求的操作方法和找不到请求的控制器名称时的一种报错行为的优化. 第一步:在thinkphp框架中的Home/Comtroller中建一个EmptyController.clas ...
- [2012-4-10]ThinkPHP框架被爆任意代码执行漏洞(preg_replace)
昨日(2012.04.09)ThinkPHP框架被爆出了一个php代码任意执行漏洞,黑客只需提交一段特殊的URL就可以在网站上执行恶意代码. ThinkPHP作为国内使用比较广泛的老牌PHP MVC框 ...
- ThinkPHP框架的部署
1.将ThinkPHP框架的框架文件放到想要放置的地方,与创建的应用文件夹同级 2.vhost文件中设置虚拟目录 3.在hosts文件中配置 4.在应用目录中创建入口文件index.php 5.在入口 ...
随机推荐
- PHP模拟POST请求,获取response内容
/* * 模拟POST请求,获取response内容 */ protected function curl($url, $type, $header, $data) { $CURL_OPTS = ar ...
- Win7 Object_Header之TypeIndex解析
在暴力搜索内存进程对象反隐藏进程这篇文章中,我们提到: Object Header偏移0×008处Type成员为对象类型值,相同类型的对象具有相同的值. 自Window 7开始, _OBJECT_ ...
- 对于Eclipse的正确用法
有时候我们刚刚修改了工程里的文件 但是启动的时候它硬是说你有东西没有声明 而那个东西又明明在那里.. 这时候我们可以认为实际与它调用的工程关系文件(我假想的) 不同步.. 我们可以通过clean功能来 ...
- nginx配置文件nginx.conf
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...
- go语言
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.和今天的C++或C一样,Go是一种系统语言. 1.windows开发工具:Golang for Windows ...
- a标签 打电话 发邮件
打电话<a href=”tel:010-13220163333″>13220163333</a> 发邮件<a href=”mailto:sb@you.com”>发送 ...
- poj3616 LIS变形
题目链接:http://poj.org/problem?id=3616 题意:给出m组数据a,b,c代表在第a分钟到第b分钟产生c个效益,问最大产生多少效益(区间不能重叠,每次工作完必须歇息R分钟) ...
- HTTP基础11--web(3)
邮件首部注入攻击 指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击.利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告邮件或病毒邮 ...
- 破解ZIP加密文件密码fcrackzip
破解ZIP加密文件密码fcrackzip ZIP是最常见的文件压缩方式.由于其压缩算法开源,主流操作系统都支持这种压缩算法.ZIP压缩方式支持密码加密.加密的时候会在文件头部保存密钥相关信息.利用这个 ...
- ssl原理,非对称加密握手,对称加密传输
SSL的基本思想是用非对称加密来建立链接(握手阶段),用对称加密来传输数据(传输阶段).这样既保证了密钥分发的安全,也保证了通信的效率. SSL握手,单方服务器认证(一般的浏览器上网) SSL握手,双 ...