thinkphp action.class.php 学习
控制器类(Action)
描述 Description
ThinkPHP Action控制器基类 抽象类
位置:ThinkPHP/Lib/Core/Action.class.php
声明:
- abstract class Action {}
常量 Constants
无
属性 Properties
| 属性名 | 类型 | 访问 | 描述 |
|---|---|---|---|
| view | View | protected | 视图实例对象 默认为NULL |
| name | string | private | 当前Action名称 默认为空字符串 |
方法 Methods
| 方法名 | 返回值类型 | 描述 |
|---|---|---|
| __construct() | void | 架构方法 |
| getActionName() | string | 获取当前Action名称 |
| isAjax() | bool | 是否是ajax方式提交 |
| display() | void | 页面输出 |
| fetch() | string | 获取页面输出内容 |
| buildHtml() | string | 创建静态Html页面 |
| assign() | void | 模板变量赋值 |
| error() | void | 操作错误跳转 |
| success() | void | 操作成功跳转 |
| ajaxReturn() | void | ajax返回数据 |
| redirect() | void | Action跳转(URL重定向) |
| __destruct() | void | 析构方法 |
__construct()
说明:
public void __construct()
架构方法
参数:
无
返回值:
无
源码:
- public function __construct() {
- tag('action_begin');
- //实例化视图类
- $this->view = Think::instance('View');
- //控制器初始化
- if(method_exists($this,'_initialize'))
- $this->_initialize();
- }
getActionName()
说明:
获取当前控制器名称
protected string getActionName()
参数:
无
返回值:
string
源码:
- protected function getActionName() {
- if(empty($this->name)) {
- // 获取Action名称
- $this->name = substr(get_class($this),0,-6);
- }
- return $this->name;
- }
isAjax()
说明:
protected bool isAjax()
判断是否是Ajax提交 首先判断是否存在HTTP_X_REQUESTED_WITH系统变量,如果不存在则判断VAR_AJAX_SUBMIT配置定义的提交变量
参数:
无
返回值:
如果是ajax方式提交返回true,否则返回false。
源码:
- protected function isAjax() {
- if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
- if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
- return true;
- }
- if(!empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')]))
- // 判断Ajax方式提交
- return true;
- return false;
- }
示例:
- if($this->isAjax()){
- echo 'ajax方式提交';
- }else{
- echo '不是ajax方式提交';
- }
display()
说明:
protected void display($templateFile='',$charset='',$contentType='')
模板显示 调用视图类的display方法
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| $templateFile | string | 指定要调用的模板文件,默认为空 由系统自动定位模板文件 |
| $charset | string | 输出编码 |
| $contentType | string | 输出类型 |
返回值:
无
源码:
- protected function display($templateFile='',$charset='',$contentType='') {
- $this->view->display($templateFile,$charset,$contentType);
- }
示例:
- $this->display('edit');
fetch()
说明:
protected string fetch($templateFile='')
获取输出页面内容,调用视图类的fetch方法
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| $templateFile | string | 指定要调用的模板文件 默认为空 由系统自动定位模板文件 |
返回值:
返回获取的内容
源码:
- protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
- $content = $this->fetch($templateFile);
- $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH;
- $htmlfile = $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
- if(!is_dir(dirname($htmlfile)))
- // 如果静态目录不存在 则创建
- mk_dir(dirname($htmlfile));
- if(false === file_put_contents($htmlfile,$content))
- throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile);
- return $content;
- }
buildHtml()
说明:
创建静态页面
protected string buildHtml($htmlfile='',$htmlpath='',$templateFile='')
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| $htmlfile | string | 生成的静态文件名称 |
| $htmlpath | string | 生成的静态文件路径 |
| $templateFile | string | 指定要调用的模板文件 默认为空 由系统自动定位模板文件 |
返回值:
无
源码:
- protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
- $content = $this->fetch($templateFile);
- $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH;
- $htmlfile = $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
- if(!is_dir(dirname($htmlfile)))
- // 如果静态目录不存在 则创建
- mk_dir(dirname($htmlfile));
- if(false === file_put_contents($htmlfile,$content))
- throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile);
- return $content;
- }
assign()
说明:
模板变量赋值
protected void assign($name,$value='')
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| $name | mixed | 要显示的模板变量 如果是字符串表示单个变量赋值,如果是数组表示批量赋值 |
| $value | mixed | 变量的值 |
返回值:
无
源码:
- protected function assign($name,$value='') {
- $this->view->assign($name,$value);
- }
示例:
action中进行模板变量赋值
- //单个变量赋值
- $this->assign('title','ThinkPHP-PHP最佳实践框架');
- $this->assign('author','liu21st@gmail.com');
- // 可以用下面的方式替代
- $this->title = 'ThinkPHP-PHP最佳实践框架';
- $this->author = 'liu21st@gmail.com';
- //变量批量赋值
- $var['title']='ThinkPHP-PHP最佳实践框架';
- $var['author']='liu21st@gmail.com';
- $this->assign($var);
模板输出
- <HTML>
- <HEAD>
- <TITLE>{$title}</TITLE>
- <META name="Author" content="{$author}">
- </HEAD>
- <BODY>
- </BODY>
- </HTML>
error()
说明:
操作错误跳转的快捷方法
protected void error($message,$jumpUrl='',$ajax=false)
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| $message | string | 错误信息 |
| $jumpUrl | string | 是否为Ajax方式 |
| $ajax | bool | 页面跳转地址 |
返回值:
void
源码:
- protected function error($message,$jumpUrl='',$ajax=false) {
- $this->dispatchJump($message,0,$jumpUrl,$ajax);
- }
isGet()
说明:
判断是否为get方式提交,魔术方法__call 中定义
protected bool isGet()
参数:
无
返回值:
如果是get方式提交返回true,否则返回false。
isPost()
说明:
判断是否为post方式提交,魔术方法__call中定义
protected bool isPost()
参数:
无
返回值:
如果是post方式提交返回true,否则返回false。
isPut()
说明:
判断是否为Put方式提交,魔术方法__call中定义
protected bool isPut()
参数:
无
返回值:
如果是put方式提交返回true,否则返回false。
isDelete()
说明:
判断是否为delete方式提交,魔术方法__call中定义
protected bool isDelete()
参数:
无
返回值:
如果是delete方式提交返回true,否则返回false。
isHead()
说明:
判断是否为head提交,魔术方法__call中定义
protected bool isHead()
参数:
无
返回值:
如果是head提交返回true,否则返回false。
ajaxReturn()
说明:
Ajax方式返回数据到客户端
protected void ajaxReturn($data,$info='',$status=1,$type='')
参数:
| $data | mixed | 要返回的数据 |
| $info | string | 提示信息 |
| $status | integer | 返回状态 |
| $type | string | ajax返回类型 支持JSON XML EVAL |
返回值:
无
源码:
- protected function ajaxReturn($data,$info='',$status=1,$type='') {
- $result = array();
- $result['status'] = $status;
- $result['info'] = $info;
- $result['data'] = $data;
- //扩展ajax返回数据, 在Action中定义function ajaxAssign(&$result){} 方法 扩展ajax返回数据。
- if(method_exists($this,'ajaxAssign'))
- $this->ajaxAssign($result);
- if(empty($type)) $type = C('DEFAULT_AJAX_RETURN');
- if(strtoupper($type)=='JSON') {
- // 返回JSON数据格式到客户端 包含状态信息
- header('Content-Type:text/html; charset=utf-8');
- exit(json_encode($result));
- }elseif(strtoupper($type)=='XML'){
- // 返回xml格式数据
- header('Content-Type:text/xml; charset=utf-8');
- exit(xml_encode($result));
- }elseif(strtoupper($type)=='EVAL'){
- // 返回可执行的js脚本
- header('Content-Type:text/html; charset=utf-8');
- exit($data);
- }else{
- // TODO 增加其它格式
- }
- }
redirect()
说明:
Action跳转(URL重定向) 支持指定模块和延时跳转
protected function redirect($url,$params=array(),$delay=0,$msg='')
源码:
- protected function redirect($url,$params=array(),$delay=0,$msg='') {
- $url = U($url,$params);
- redirect($url,$delay,$msg);
- }
dispatchJump()
说明:
默认跳转操作 支持错误导向和正确跳转
private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false)
源码:
- private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false) {
- // 判断是否为AJAX返回
- if($ajax || $this->isAjax()) $this->ajaxReturn($ajax,$message,$status);
- if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl);
- // 提示标题
- $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_'));
- //如果设置了关闭窗口,则提示完毕后自动关闭窗口
- if($this->view->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();');
- $this->assign('status',$status); // 状态
- //保证输出不受静态缓存影响
- C('HTML_CACHE_ON',false);
- if($status) { //发送成功信息
- $this->assign('message',$message);// 提示信息
- // 成功操作后默认停留1秒
- if(!$this->view->get('waitSecond')) $this->assign('waitSecond','1');
- // 默认操作成功自动返回操作前页面
- if(!$this->view->get('jumpUrl')) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]);
- $this->display(C('TMPL_ACTION_SUCCESS'));
- }else{
- $this->assign('error',$message);// 提示信息
- //发生错误时候默认停留3秒
- if(!$this->view->get('waitSecond')) $this->assign('waitSecond','3');
- // 默认发生错误的话自动返回上页
- if(!$this->view->get('jumpUrl')) $this->assign('jumpUrl',"javascript:history.back(-1);");
- $this->display(C('TMPL_ACTION_ERROR'));
- // 中止执行 避免出错后继续执行
- exit ;
- }
- }
__destruct()
说明:
析构方法
public function __destruct()
源码:
- public function __destruct() {
- // 保存日志
- if(C('LOG_RECORD')) Log::save();
- // 执行后续操作
- tag('action_end');
- }
- }
thinkphp action.class.php 学习的更多相关文章
- 根据ThinkPHP官方文档学习opensns框架
根据ThinkPHP官方文档学习opensns框架 1.解读Application下各个Controller文件夹下的作用 控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller ...
- Redis in Action : Redis 实战学习笔记
1 1 1 Redis in Action : Redis 实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...
- thinkphp快速入门(学习php框架及代码审计)
之前想学习php代码审计,但是没有坚持下去,记得当时看到了很多CMS框架采用MVC架构,就嘎然而止了. 为了深入学习下框架,一边看着thinkphp官方文档,一边写个简单的登陆注册页面以加深理解. 官 ...
- Machine Learning In Action 第二章学习笔记: kNN算法
本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...
- thinkphp action参数绑定
参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析. 参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块.控制器和操作名)和操作方法中的参数进行绑 ...
- opensns学习
根据ThinkPHP官方文档学习opensns框架 主要看了下opensns所用的单一入口模式的意义. 基础 opensns目录结构 index.php 入口文件 Application 应用目录(含 ...
- Jqgrid学习API
JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...
- Action<>和Func<> 委托【代理】
C#中的Action<>和Func<> 其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的 ...
- 一步一步学习C++
根据<C++ primer>第五版 总结学习心得. 在实践中,不必全面地使用C++语言的各种特性,而应根据工程的实际情况,适当取舍(譬如动态类型信息,虚拟继承.异常等特性的使用,很值得商榷 ...
随机推荐
- VirtualBox扩展Ubuntu磁盘空间
有时候我们在使用virtualBox虚拟机时,创建虚拟机时并没有考虑到所占用硬盘大小,后来可能磁盘空间不够用了. 以下方法可以帮你扩展虚拟机的存储空间(以下Ubuntu为例). 1. 在宿主机器进入V ...
- lightoj 1291 无向图边双联通+缩点统计叶节点
题目链接:http://lightoj.com/volume_showproblem.php?problem=1291 #include<cstdio> #include<cstri ...
- 关闭ES动态创建mapping
使用ES的默认配置会使我们在索引不存在于mapping中的字段时,会自动创建. 这无疑会给我们带来困扰. 在我们不想要某个字段被搜索的时候,我们可以在开始关闭动态创建mapping. 执行如下操作: ...
- greenplum和postgresql
想着要不要写,两个原因"懒"和"空".其实懒和空也是有联系的,不是因为懒的写,而是因为对PostgreSQL和Npgsql的知识了解匮乏,也就懒得写.好了,开头 ...
- IOS web网页图片上传问题
用html5编写图片裁切上传,在iphone手机上可能会遇到图片方向错误问题,在此把解决方法和大家分享一下,用到了html5的 FileReader和Canvas,如果还没有接触的同学,先了解一下其方 ...
- android获取apk签名信息
因为工作需要,需要获取应用的apk传递给新浪微博或者微信去申请授权 所以需要程序内获取签名上传服务器 做法如下: public static String getAPPSecretString(A ...
- 【wpf基础】wpf MediaElement全屏播放视频功能
最近在研究如何将视频全屏播放,一开始思路A:弹窗将MediaElement对象add到一个新的全屏窗体,报错 指定的元素已经是另一个元素的逻辑子元素.请先将其断开连接. 后续转换思路B:将本窗体其他控 ...
- XMPPFrameWork IOS 开发(二)- xcode配置
原始地址:XMPPFrameWork IOS 开发(二) 译文地址: Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...
- [Javascript] String method: endsWith() && startsWith()
With endsWith && startsWith, you can easily find out whether the string ends or starts with ...
- 开源实时视频码流分析软件:VideoEye
本文介绍一个自己做的码流分析软件:VideoEye.为什么要起这个名字呢?感觉这个软件的主要功能就是对"视频"进行"分析".而分析是要用眼睛来看的,因此取了&q ...