Onthink學習隨筆,onthink隨筆
-------------------------------------(寫代碼不孤獨_小小代)
用Onthink寫了一個網站暫時還沒上線功能略顯不全沒,完全沒有發揮出應有的強大拓展之處,各種地方略顯蹩腳。
但是其強大的資料表控制還是顯漏一角,鑒於此進軍基於開發的thinphp3.2.2世界。。。
第一天 完成手冊序言,基礎,配置,架構,路由閱讀。
第二天 完成控制器模型閱讀 關於 附錄閱讀
下面是閱讀隨錄
*************************************************
use 表示引入什麼 命名空間便於直接引用
函數的命名方法使用小寫字母和底線的方式
方法的命名 使用的小寫字母和底線 底線的代表的是(一般私人方法 )
雙底線 打頭的函數或方法作為魔法方法 __call
養成使用I函數擷取輸入變數的好習慣;
更新或者環境改變後遇到問題首要問題是清空Runtime目錄;
慣例配置 應用配置 模式配置 調試配置 狀態配置 模組配置
慣例配置ThinkPHP/Conf/convention.php 應用配置是基於慣例配置的拓展
Application/Common/Conf/config.php調用所有模組之前都會先載入的公用設定檔
可選擇的模式配置就是在應用設定檔夾新增 運行該模式才啟動並執行檔案config_應用程式名稱.php
偵錯模式 開啟就會載入ThinkPHP/Conf/debug.php和應用調試設定檔Application下的
狀態配置就是手工分離
模組配置 Application/當前模組名/Conf/config.php
讀取設定檔
定義了設定檔後,都統一使用系統提供C方法(可以藉助Config)來讀取或者設定
配置參數名稱不能含有'.'和特殊字元,允許的字母,數字和底線 C方法可以讀取二維
配置 配置參數是全域有效 通過c配置的參數值是當前有效地不會寫入資料庫
URL詳情 pathinfo模式說明
serverName/index.php(或者其他應用入口檔案)/模組/控制器/操作/[參數名/參數值...]
公用的設定檔config.php 公用函數檔案function.php可以把路徑載入到common_path中
在入口檔案當中配置,如果定義過後Application下面就不需要在載入Application
3.2.2寫在入口檔案可以預設自動產生的模組,控制器。define('BIND_MODULE','xx')如
果想產生更多的控制器BUILD_CONTROLLER_LIST常量
// 綁定Admin模組到當前入口檔案
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
手動調用Think\Bulid類的方法來產生模型類\Think\Build::buildModel
('Admin','Role');
//禁止訪問模組 配置禁止訪問的模組列表(用於被其他模組調用或者不開放訪問),預設配置中
是禁止訪問Common模組和Runtime模組(Runtime目錄是預設的運行時目錄),我們可以增加其他的
禁止訪問模組列表:
'MODULE_DENY_LIST' => array('Common','Runtime','Api'),
設定訪問列表
允許訪問列表和預設模組
'MODULE_ALLOW_LIST' => array('Home','Admin','User'),'DEFAULT_MODULE'
=> 'Home',
單模組設計 就是關閉多模組訪問 MULTI_MODOULE=>false
多入口設計
接受參數綁定模組
// 綁定Home模組到當前入口檔案$_GET['m'] = 'Home';
define('APP_PATH','./Application/');require './ThinkPHP/ThinkPHP.php';
綁定後http://serverName/index.php/Home/Index/index變成
http://serverName/home.php/Index/index(綁定後url不顯示home)
URL區分大小寫 URL_CASE_INSENSITIVE=>true
模型層 資料層,邏輯層,服務層,等不同的模型層 建立Model,Logic,sercive
調用的時候 用D方法很方便的調用 D('User','Logic');//執行個體化UserLogic D('User')則是執行個體化
UserModel .
更改系統預設的view層 DEFAULT_V_LAYER=>'Mobile';對於非預設視圖層目錄的模板擷取使用T函
數擷取。
控制器(Controller)層 核心控制器在系統內部的App類完成
Event/UserEvent//用於使用者的事件響應操作Controller負責的事外部的響應Event負責內
部的事件響應,並且只能在內部調用A('User','Event');
CBD模型
Core(核心)+Behavior(行為)+Driver(驅動)
Driver(驅動)
3.2在架構設計上更加強化了驅動的設計,替代了之前的引擎和模式擴充,並且改進了行為的設
計,使得架構整體更加靈活,並且由於在需要寫入資料的功能類庫中都採用了驅動化的設計思想,
所以使得新的架構能夠輕鬆滿足分布式部署的需求,對雲平台的支援可以更簡單的實現了。
Behavior(行為)
行為是一個比較抽象的概念,各個位置都會有行為的產生。
有些行為是在應用執行之前,有些是在模板輸出以後,我們把這些行為作為的位置成為標
簽(位),也可以成為鉤子, 當應用程式運行到這個標籤的時候,就會被攔截下來,統一執行相關的
行為,類似於AOP編程中的“切面”的概念,給某一個標籤綁定相關行為就成了一種類AOP編程的思
想。
標籤位
tag函數用於設定某個標籤位,可以傳入並且只接受一個參數,如果需要傳入多個參數,
請使用數組, \Think\Hook::listen('my_tag');
行為定義 必須定義執行入口方法run,由於行為的調用機制影響,在那調用在哪返回。
行為綁定 行為定義後需要定義到某個標籤位才會生效,否則是不會執行的。 需要在應用
的行為定義檔案tags.php檔案中進行行為和標籤的位置定義。
return array( '標籤名稱1'=>array('行為名1','行為名2',...), '標籤名稱
2'=>array('行為名1','行為名2',...), );
3.2.1版本以上的,允許設定對應類庫不使用命名空間。
設定檔'APP_USE_NAMESPACE' => false(繼承調用系統類別的時候,仍需要)
3.2版本中執行個體化php內建的類庫或者第三方的沒有使用命名空間定義的類。
$class = new \stdClass(); $sxml = new \SimpleXmlElement($xmlstr);
自動載入 (命名空間自動載入)Library目錄下面的命名空間都可以自動識別和定位。
除了library目錄下的命名空間以外,我們還可以定義其他的命名空間
autoload_namespace
提高效率 類庫映射多個根命名空間Think\Think::addMap($map); $map=array();
手動第三方類庫匯入import方法匯入任何類庫。
內建的緩衝機制 和運行lite檔案 新版本的特徵 運行時產生靜態入口檔案。
應用模式 應用模式就是增加自動識別地區
項目編譯 應用編譯緩衝(首次啟動並執行緩衝)——運行Lite檔案(入口靜態)
-------------===========
路由定義
url不為普通模式,開啟路由可以在應用(或者模組)設定檔中開啟路由
// 開啟路由 'URL_ROUTER_ON'=〉true, 3.2路由是針對模組 所以模組名不能被路由,路由的定義
通常也是在模組設定檔中。
路由運算式=〉路由地址和傳入參數 array('路由運算式','路由地址','傳入參
數')
路由運算式
Regex /^blog\/(\d+)$/
規則運算式 blog/:id
完全符合 $
公用方法
-------
控制器
如果要操作的方法是一個控制器的方法是與系統的關鍵字衝突,我們可以設定尾碼的方法
解決 'ACTION_SUFFIX'=> 'Action', // 操作方法尾碼
多級控制器 就是把控制器分組
執行個體化控制器 如果是內部的則在用url位址解析的時候就自動執行個體化了並且調用如果是跨控制器調
用的話則 執行個體化 然後使用快捷方法A調用(如果是多層次的話就使用A的第二個參數) 可以在執行個體
化的時候那方法執行個體化.
前置和後置操作 (僅對控制器有用)
常見的是_before_index前置方法 _after_index後置方法 如果沒有定義前置後置方法,真正有模
板輸出的可能僅僅是當前的操作,前置和後置操作一般情況下是沒有任何輸出的。調用錯誤成功操
作的話是沒有後置操作的。
控制器也可以綁定參數規則 action參數綁定 (按變數名能綁定 實現路由功能)
偽靜態
URL_HTML_SUFFIX=〉'' 靜態尾碼記錄到常量__EXT__(可以擷取當前的尾碼)
URL_DENY_SUFFIX=〉不允許訪問的尾碼 多個用|隔開
下面的優先順序高於上面的
URL大小寫 'URL_CASE_INSENSITIVE' =>true 不區分大小寫時候存取控制器大寫要前加_
系統提供U方法可以為你自動產生相關的URL地址
U 類似的(redirect) (URL產生)
為了配合所使用的URL模式,我們需要能夠動態根據當前的URL設定產生對應的URL地址,為此,
ThinkPHP內建提供了U方法,用於URL的動態產生,可以確保項目在移植過程中不受環境的影響。
U('地址運算式',['參數'],['偽靜態尾碼'],['顯示網域名稱'])
[模組/控制器/操作#錨點@網域名稱]?參數1=值1&參數2=值2...
ajax返回 ajaxReturn
可以接受 變數 數組 返回的資料可以治 JSON、JSONP、XML和EVAL 可以配置採用什麼方
式返回DEFAULT_AJAX_RETURN 進行返回 eval可以輸出$data資料
JSON和JSONP雖然只有一個字母的差別,但其實他們根本不是一回事兒:JSON是一種數
據交換格式,而JSONP是一種非官方跨域資料互動協議。一個是描述資訊的格式,一個
是資訊傳遞的
約定方法。
跳轉和重新導向
$this->success(提示資訊,地址,秒數)
----==--=-=
輸入變數
可以通過 I 函數進行變數擷取和過濾
I('變數類型.變數名',['預設值'],['過濾方法'],['額外資料來源'])
I函數內建就有DEFAULT_FILTER預設的是htmlspecialchars (變數的過濾)
判斷請求類型 (請求類型)
is_XXX 如果是自訂的AJAX則需要添加隱藏欄位告訴後台是ajax提交的 如果是jquery的
話則不需要。 可以通過VAR_AJAX_SUBMI配置
空操作
自動調用_empty(實現錯誤頁面和一些url最佳化)
空控制器系統嘗試定到EmptyController
操作綁定到類 ACTION_BIND_CLASS=〉‘true’分的更加細緻不能省略
前置後置操作需要提前定義
-=-=-=-=-=-=-=-=-=-=-=-
模型 大小寫和_轉換
模型類直接執行個體化一般都繼承model類 model一般有3個值 模型名資料表首碼數
據庫串連資訊
如果要寫原生的sql代碼 則只需要執行個體化空就好M();
D (資料模型的執行個體化操作)
方法的參數就是模型的名稱,並且和模型類的大小寫定義是一致的.
類不存在的時候,D函數會嘗試執行個體化公用模組下面的,還可以跨模組使用
M(僅僅是對資料表進行基本的CURD操作)不需要載入具體的模型類,所以效能更高.
不支援自己的商務邏輯
我們在執行個體化的過程中,經常使用D方法和M方法,這兩個方法的區別在於M方法執行個體化模
型無需使用者為每個資料表定義模型類,如果D方法沒有找到定義的模型類,則會自動用M
方法。
欄位緩衝包括欄位裡面的欄位資訊 可以通過設定DB_FIELDS_CACHE來關閉欄位自動緩衝在項目配置
檔案中增加該欄位
擷取資料表的所有欄位資訊 getDbFields(); field(''/*);擷取要調用所有欄位field
(true).
切換資料表用table(); 串連資料庫的時候可以為串連加上標識
系統預設規則,必須用模型execute 寫操作 query 讀操作
連貫操作 (鏈式操作)
where可以和where連用
data方法 是針對資料庫寫入的也可以用於更新(save)可以判斷是否有主鍵 對象可以是數
組,對象和字串。可以進行讀操作.
field 擷取欄位,欄位的排除filed(array('user_id','content'),true);就是user_id和
content之外的欄位。 用於寫入 (安全性的控制)不允許其他的寫入 $model->field('name')-
>create();即表示表單中的合法欄位只有name欄位,無論使用者通過什麼手段更改或者添加了瀏覽器
的提交欄位,都會直接屏蔽。因為,其他是所有欄位我們都不希望由使用者提交來決定,你可以通過
自動完成功能定義額外的欄位寫入。
filert(欄位內容的過濾)有點類似I的判斷 $User->data($data)->filter
('strip_tags')->add();過濾掉HTML標籤 (支援回調類型的函數 可以是函數或者是閉包
定義)
having方法是為了配合group方法從分組的結果中重新查詢。
cache s
comment 注釋
Create方法建立的資料對象是儲存在記憶體中,並沒有實際寫入到資料庫中,直到使用add
或者save方法才會真正寫入資料庫。add或者save之後才被寫入資料庫,因此在沒有改變之前都可
以改變create對象.
----
find(讀取一條欄位) select(讀取欄位集) getField(讀取欄位值)[數位更新setInc setDec]
delete() [在沒有任何的條件傳入的時候是不會進行刪除的類似於seve]
表單映射 資料擷取的時候自動處理設定開啟 'READ_DATA_MAP'=>true
也可以使用parseFieldsMap進行格式上的轉換
查詢方式
數組 '_logic'='OR' 使用對象方式查詢 stdClass
$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');
exp 運算式查詢(exp查詢的條件不會被當成字串) 所有後面的查詢條件可以使用任何的
sql支援的文法,包括使用函數和欄位名稱。查詢運算式不僅可以用於查詢條件,也可以用於數。
據更新。
$data['score'] = array('exp','score+1');// 使用者的積分加1
$User->where('id=5')->save($data); // 根據條件儲存修改的資料
多語言套件的支援 L
*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1
????????????????????????????????????????
多級控制器
執行個體化控制器
distinct
(令牌驗證)token
ORM 表映射到類 記錄映射到對象
AR模式 ActiveRecord 一種簡單的命令
怎麼帶有prefix就可以啟用本地session管理的支援
*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1
http://www.bkjia.com/PHPjc/920432.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/920432.htmlTechArticleOnthink學習隨筆,onthink隨筆 -------------------------------------(寫代碼不孤獨_小小代) 用Onthink寫了一個網站暫時還沒上線功能略顯不全沒,完全...