zoukankan      html  css  js  c++  java
  • thinkphp action.class.php 学习

    控制器类(Action)

    描述 Description

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

    声明
    1. 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()
    架构方法
    参数

    返回值


    源码:
    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方法
    参数
    参数类型说明
    $templateFile string 指定要调用的模板文件,默认为空 由系统自动定位模板文件
    $charset string 输出编码
    $contentType string 输出类型
    返回值

    源码:
    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方法
    参数
    参数类型说明
    $templateFile string 指定要调用的模板文件 默认为空 由系统自动定位模板文件
    返回值
    返回获取的内容
    源码:
    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='')
    参数
    参数类型说明
    $htmlfile string 生成的静态文件名称
    $htmlpath string 生成的静态文件路径
    $templateFile string 指定要调用的模板文件 默认为空 由系统自动定位模板文件
    返回值

    源码:
    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='')
    参数
    参数类型说明
    $name mixed 要显示的模板变量 如果是字符串表示单个变量赋值,如果是数组表示批量赋值
    $value mixed 变量的值
    返回值

    源码:
    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)
    参数
    参数类型说明
    $message string 错误信息
    $jumpUrl string 是否为Ajax方式
    $ajax bool 页面跳转地址
    返回值
    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='')
    参数
    $data mixed 要返回的数据
    $info string 提示信息
    $status integer 返回状态
    $type string ajax返回类型 支持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. }
  • 相关阅读:
    前端编码风格规范之 JavaScript 规范
    用队列模拟jquery的动画算法
    延时调用--deferred.js原码分析
    javascript模拟继承
    从国外开源项目中提取的继承类
    webapp应用---cordova.js 3.7.0插件安装总结
    架构师速成8.1-谈做技术人员的态度 分类: 架构师速成 2015-07-18 07:22 56人阅读 评论(0) 收藏
    架构师速成6.6-知识的收集整理学习 分类: 架构师速成 2015-07-16 21:50 254人阅读 评论(0) 收藏
    架构师速成7.4-架构师为什么要带团队 分类: 架构师速成 2015-07-15 09:12 558人阅读 评论(2) 收藏
    架构师速成6.5-也谈设计模式 分类: 架构师速成 2015-07-14 19:48 284人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/3682601.html
Copyright © 2011-2022 走看看