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. }
相關文章
相關標籤/搜索