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++语言的各种特性,而应根据工程的实际情况,适当取舍(譬如动态类型信息,虚拟继承.异常等特性的使用,很值得商榷 ...
随机推荐
- Combination Sum III —— LeetCode
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- A Mini Locomotive(动态规划 01)
/* 题意:选出3个连续的 数的个数 为K的区间,使他们的和最大 分析: dp[j][i]=max(dp[j-k][i-1]+value[j],dp[j-1][i]); dp[j][i]:从 ...
- ssh日志记录
上天查看了服务器安全日志,防火墙屏蔽了处理了一些暴力破解ssh密码的ip(其中一个ip地址为北京一家有名的CDN服务提供商),然后删除了所有的/var/log/secure* 日志文件.今天再来查看日 ...
- I - Fire Game
题目大意: 火焰游戏 在一个];][] = { {,},{,},{-,},{,-} };; i<M; i++) ; j<N; j++) { ) ...
- windows路由命令route
route print 查看当前的路由信息 route add 10.0.0.0 mask 255.0.0.0 10.1.1.1 增加一条到10.0.0.0/8网络的路由,网关是10.1.1.1 ro ...
- 全面剖析XML和JSON
1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...
- android如何建立数据库。(如何重写SQLiteOpenHelper)
public class DBConnection extendsSQLiteOpenHelper{//继承SQLiteOpenHelper, public DBConnection(Context ...
- Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套
RadioGroup中的各个选择器 <selector xmlns:android="http://schemas.android.com/apk/res/android"& ...
- 1小时学Python脚本
如果我们有这么一项任务:简单測试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux一般是bash而 ...
- Google开发规范
v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成 头文件 ...