thinkphp url中action 沒有定義 也能訪問到模板?
thinkphp url中action 沒有定義 也能訪問到模板?
最近剛剛開始接觸thinkphp 的架構,但是在看公司源碼的時候,發現url中的action在類中沒有對應的實現方法。
thinkphp 中有空操作和空模組之說, 我本來以為是通過空操作來實現的。
最終確認的結果:根本沒有經過模組,直接把action對應的模板給display了。
本人剛剛接觸thinkphp 不知道為什麼 求大神幫忙
------解決思路----------------------
你看下配置裡面是不是開啟了路由功能,路由功能可以偽造地址;不知道這個是不是你現在遇到的問題。
------解決思路----------------------
引用:
你看下配置裡面是不是開啟了路由功能,路由功能可以偽造地址;不知道這個是不是你現在遇到的問題。
------解決思路----------------------
在進入使用者自訂的action之前,會自動檢測是否存在該方法
如果沒有就直接讀模板,連模板都沒有就報一個該方法不存在之類的錯誤
------解決思路----------------------
引用:
Quote: 引用:
在進入使用者自訂的action之前,會自動檢測是否存在該方法
如果沒有就直接讀模板,連模板都沒有就報一個該方法不存在之類的錯誤
謝謝你的解釋,你能提供thinkphp官網對此說明的連結給我嗎?
這個...沒仔細看過官方的,根據它的表現完全可以逆推出原理
如果你感興趣,可以完整閱讀tp的源碼
------解決思路----------------------
見 ThinkPHP/Library/Think/Controller.class.php __call 方法
/**
* 魔術方法 有不存在的操作的時候執行
* @access public
* @param string $method 方法名
* @param array $args 參數
* @return mixed
*/
public function __call($method,$args) {
if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {
if(method_exists($this,'_empty')) {
// 如果定義了_empty操作 則調用
$this->_empty($method,$args);
}elseif(file_exists_case($this->view->parseTemplate())){
// 檢查是否存在預設模版 如果有直接輸出模版
$this->display();
}else{
E(L('_ERROR_ACTION_').':'.ACTION_NAME);
}
}else{
E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
return;
}
}
這是一種容錯技術,並不需要在使用手冊中說明