thinkphp action.class.php 学习

控制器类(Action)

描述 Description

ThinkPHP Action控制器基类 抽象类
位置: ThinkPHP/Lib/Core/Action.class.php

声明
  1. abstract class Action {}
 

常量 Constants

 

属性 Properties

属性名类型访问描述
viewViewprotected视图实例对象 默认为NULL
namestringprivate当前Action名称 默认为空字符串
 

方法 Methods

方法名返回值类型描述
__construct()void架构方法
getActionName()string获取当前Action名称
isAjax()bool是否是ajax方式提交
display()void页面输出
fetch()string获取页面输出内容
buildHtml()string创建静态Html页面
assign()void模板变量赋值
error()void操作错误跳转
success()void操作成功跳转
ajaxReturn()voidajax返回数据
redirect()voidAction跳转(URL重定向)
__destruct()void析构方法
 
__construct()
说明
public void __construct()
架构方法
参数

返回值


源码:
  1.     public function __construct() {
  2.         tag('action_begin');
  3.         //实例化视图类
  4.         $this->view       = Think::instance('View');
  5.         //控制器初始化 
  6.         if(method_exists($this,'_initialize'))
  7.             $this->_initialize();
  8.     }
 
getActionName()
说明
获取当前控制器名称
protected string getActionName()

参数


返回值
string

源码:
  1.     protected function getActionName() {
  2.         if(empty($this->name)) {
  3.             // 获取Action名称
  4.             $this->name     =   substr(get_class($this),0,-6);
  5.         }
  6.         return $this->name;
  7.     }
 
isAjax()
说明
protected bool isAjax()
判断是否是Ajax提交 首先判断是否存在HTTP_X_REQUESTED_WITH系统变量,如果不存在则判断VAR_AJAX_SUBMIT配置定义的提交变量
参数

返回值
如果是ajax方式提交返回true,否则返回false。

源码:
  1.     protected function isAjax() {
  2.         if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
  3.             if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
  4.                 return true;
  5.         }
  6.         if(!empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')]))
  7.             // 判断Ajax方式提交
  8.             return true;
  9.         return false;
  10.     }
示例
  1. if($this->isAjax()){
  2. echo 'ajax方式提交';
  3. }else{
  4. echo '不是ajax方式提交';
  5. }
 
display()
说明
protected void display($templateFile='',$charset='',$contentType='')
模板显示 调用视图类的display方法
参数
参数类型说明
$templateFilestring 指定要调用的模板文件,默认为空 由系统自动定位模板文件
$charsetstring输出编码
$contentTypestring输出类型
返回值

源码:
  1.     protected function display($templateFile='',$charset='',$contentType='') {
  2.         $this->view->display($templateFile,$charset,$contentType);
  3.     }
示例
  1. $this->display('edit');
 
fetch()
说明
protected string fetch($templateFile='')
获取输出页面内容,调用视图类的fetch方法
参数
参数类型说明
$templateFilestring指定要调用的模板文件 默认为空 由系统自动定位模板文件
返回值
返回获取的内容
源码:
  1.   protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
  2.         $content = $this->fetch($templateFile);
  3.         $htmlpath   = !empty($htmlpath)?$htmlpath:HTML_PATH;
  4.         $htmlfile =  $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
  5.         if(!is_dir(dirname($htmlfile)))
  6.             // 如果静态目录不存在 则创建
  7.             mk_dir(dirname($htmlfile));
  8.         if(false === file_put_contents($htmlfile,$content))
  9.             throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile);
  10.         return $content;
  11.     }
 
buildHtml()
说明
创建静态页面
protected string buildHtml($htmlfile='',$htmlpath='',$templateFile='')
参数
参数类型说明
$htmlfilestring生成的静态文件名称
$htmlpathstring生成的静态文件路径
$templateFilestring 指定要调用的模板文件 默认为空 由系统自动定位模板文件
返回值

源码:
  1.     protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
  2.         $content = $this->fetch($templateFile);
  3.         $htmlpath   = !empty($htmlpath)?$htmlpath:HTML_PATH;
  4.         $htmlfile =  $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
  5.         if(!is_dir(dirname($htmlfile)))
  6.             // 如果静态目录不存在 则创建
  7.             mk_dir(dirname($htmlfile));
  8.         if(false === file_put_contents($htmlfile,$content))
  9.             throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile);
  10.         return $content;
  11.     }
 
assign()
说明
模板变量赋值
protected void assign($name,$value='')
参数
参数类型说明
$namemixed要显示的模板变量 如果是字符串表示单个变量赋值,如果是数组表示批量赋值
$valuemixed变量的值
返回值

源码:
  1.     protected function assign($name,$value='') {
  2.         $this->view->assign($name,$value);
  3.     }
示例:
action中进行模板变量赋值
  1. //单个变量赋值
  2. $this->assign('title','ThinkPHP-PHP最佳实践框架');
  3. $this->assign('author','liu21st@gmail.com');
  4. // 可以用下面的方式替代
  5. $this->title = 'ThinkPHP-PHP最佳实践框架';
  6. $this->author = 'liu21st@gmail.com';
  7. //变量批量赋值
  8. $var['title']='ThinkPHP-PHP最佳实践框架';
  9. $var['author']='liu21st@gmail.com';
  10. $this->assign($var);
模板输出
  1. <HTML>
  2.  <HEAD>
  3.   <TITLE>{$title}</TITLE>
  4.   <META name="Author" content="{$author}">
  5.  </HEAD>
  6.  <BODY>  
  7.  </BODY>
  8. </HTML>
 
error()
说明
操作错误跳转的快捷方法
protected void error($message,$jumpUrl='',$ajax=false)
参数
参数类型说明
$messagestring错误信息
$jumpUrlstring是否为Ajax方式
$ajaxbool页面跳转地址
返回值
void


源码:
  1.     protected function error($message,$jumpUrl='',$ajax=false) {
  2.         $this->dispatchJump($message,0,$jumpUrl,$ajax);
  3.     }
 
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='')
参数
$datamixed要返回的数据
$infostring提示信息
$statusinteger返回状态
$typestringajax返回类型 支持JSON XML EVAL
返回值

源码
  1.     protected function ajaxReturn($data,$info='',$status=1,$type='') {
  2.         $result  =  array();
  3.         $result['status']  =  $status;
  4.         $result['info'] =  $info;
  5.         $result['data'] = $data;
  6.         //扩展ajax返回数据, 在Action中定义function ajaxAssign(&$result){} 方法 扩展ajax返回数据。
  7.         if(method_exists($this,'ajaxAssign')) 
  8.             $this->ajaxAssign($result);
  9.         if(empty($type)) $type  =   C('DEFAULT_AJAX_RETURN');
  10.         if(strtoupper($type)=='JSON') {
  11.             // 返回JSON数据格式到客户端 包含状态信息
  12.             header('Content-Type:text/html; charset=utf-8');
  13.             exit(json_encode($result));
  14.         }elseif(strtoupper($type)=='XML'){
  15.             // 返回xml格式数据
  16.             header('Content-Type:text/xml; charset=utf-8');
  17.             exit(xml_encode($result));
  18.         }elseif(strtoupper($type)=='EVAL'){
  19.             // 返回可执行的js脚本
  20.             header('Content-Type:text/html; charset=utf-8');
  21.             exit($data);
  22.         }else{
  23.             // TODO 增加其它格式
  24.         }
  25.     }
 
redirect()
说明
Action跳转(URL重定向) 支持指定模块和延时跳转
protected function redirect($url,$params=array(),$delay=0,$msg='')
源码
  1.     protected function redirect($url,$params=array(),$delay=0,$msg='') {
  2.         $url    =   U($url,$params);
  3.         redirect($url,$delay,$msg);
  4.     }
 
dispatchJump()
说明
默认跳转操作 支持错误导向和正确跳转
private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false)
源码
  1.    private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false) {
  2.         // 判断是否为AJAX返回
  3.         if($ajax || $this->isAjax()) $this->ajaxReturn($ajax,$message,$status);
  4.         if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl);
  5.         // 提示标题
  6.         $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_'));
  7.         //如果设置了关闭窗口,则提示完毕后自动关闭窗口
  8.         if($this->view->get('closeWin'))    $this->assign('jumpUrl','javascript:window.close();');
  9.         $this->assign('status',$status);   // 状态
  10.         //保证输出不受静态缓存影响
  11.         C('HTML_CACHE_ON',false);
  12.         if($status) { //发送成功信息
  13.             $this->assign('message',$message);// 提示信息
  14.             // 成功操作后默认停留1秒
  15.             if(!$this->view->get('waitSecond'))    $this->assign('waitSecond','1');
  16.             // 默认操作成功自动返回操作前页面
  17.             if(!$this->view->get('jumpUrl')) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]);
  18.             $this->display(C('TMPL_ACTION_SUCCESS'));
  19.         }else{
  20.             $this->assign('error',$message);// 提示信息
  21.             //发生错误时候默认停留3秒
  22.             if(!$this->view->get('waitSecond'))    $this->assign('waitSecond','3');
  23.             // 默认发生错误的话自动返回上页
  24.             if(!$this->view->get('jumpUrl')) $this->assign('jumpUrl',"javascript:history.back(-1);");
  25.             $this->display(C('TMPL_ACTION_ERROR'));
  26.             // 中止执行  避免出错后继续执行
  27.             exit ;
  28.         }
  29.     }
 
__destruct()
说明
析构方法
public function __destruct()
源码
  1.    public function __destruct() {
  2.         // 保存日志
  3.         if(C('LOG_RECORD')) Log::save();
  4.         // 执行后续操作
  5.         tag('action_end');
  6.     }
  7. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值