-------------------------------------(寫程式不孤獨_小小代)
用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模組到目前入口檔案
','Index,User,Menu');
手動呼叫ThinkBulid類別的方法來產生模型類別ThinkBuild::buildModel (用於被其他模組呼叫或不開放存取),預設組態中
是禁止存取Common模組和Runtime模組(Runtime目錄是預設的執行時間目錄),我們可以增加其他的
禁止存取模組清單:
'MODULE_DENY_LIST' => array('Common','Runtime','Api'),
設定存取清單
允許存取清單與預設模組
'MODULE_ALLOW_LIST' => 'MODULE_ALLOW_LIST' => 'MODULE_ALLOW_LIST' => DEFAULT_MODULE'
=> 'Home',
單模組設計為關閉多重模組存取MULTI_MODOULE=>false
多入口設計
/GE/GE/GE/GE/Lamp = 'Home';
define('APP_PATH','./Application/');require './ThinkPHP/ThinkPHP.php';
綁定後http://serverName/index.php/Home/Index/index變成
http://serverName/home.php/Index/index(綁定後url不同的模型層 建立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函數用於設定某個標籤位,可以傳入且只接受一個參數,如果需要傳入多個參數,
請使用數組, ThinkHook::listen('my_tag');定義執行入口方法run,由於行為的呼叫機制影響,在那呼叫在哪裡返回。
行為綁定 行為定義後需要定義到某個標籤位元才能生效,否則是不會執行的。 需要在應用
的行為定義檔tags.php檔案中進行行為和標籤的位置定義。
return array( '標籤名稱1'=>array('行為名稱1','行為名稱2',...), '標籤名稱
) ',...), );
3.2.1版本以上的,允許設定對應類別庫不使用命名空間。
設定檔'APP_USE_NAMESPACE' => false(繼承呼叫系統類別的時候,仍需)
3.2版本中實例化php內建的類別庫或第三方的沒有使用命名空間定義的類別。
$class = new stdClass(); $sxml = new SimpleXmlElement($xmlstr);
自動載入 (命名空間自動載入)Library目錄下方的命名空間都可以自動辨識與定位。
除了library目錄下的命名空間以外,我們還可以定義其他的命名空間
autoload_namespace
提高效率類別庫映射多個根命名空間ThinkThink::addMap($map); $map=array();三方類別庫導入import方法導入任何類別庫。
內建的快取機制 和運作lite檔案 新版本的特徵 執行階段產生靜態的入口檔案。
應用模式應用模式就是增加自動辨識區域
專案編譯應用程式編譯快取(首次運行的快取)-執行Lite檔(入口靜態)
-------------===== ======
路由定義
url不為普通模式,開啟路由可以在應用(或模組)設定檔中開啟路由
// 開啟路由'URL_ROUTER_ON'=〉true, 3.2路由是針對模組所以模組名不能被路由,路由的定義
通常也是在模組設定檔中。
路由表達式=〉路由位址與傳入參數 array('路由表達式','路由位址','傳入參
數')
路由表達式
數')
路由表達式
規則表達式blog/:id
完全匹配 $
公共方法
-------
控制器
公共方法的方法是一個衝突者是字尾的方法
解決'ACTION_SUFFIX'=> 'Action', // 操作方法後綴
多級控制器就是把控制器分組
實例化控制器如果是內部的則在用url地址解析的時候就自動實例化了並且呼叫如果是跨控制器調
用的話則實例化然後使用快捷方法A調用(如果是多層次的話就使用A的第二個參數) 可以在實例
化的時候那方法實例化.
前置和後置操作(僅對控制器有用)
常見的是_before_index前置方法_after_index後置方法 如果沒有定義前置後置方法,真正有模
板輸出的可能僅僅是當前的操作,前置和後置操作一般情況下是沒有任何輸出的。呼叫錯誤成功操
作的話是沒有後置操作的。
控制器也可以綁定參數規則action參數綁定 (依變數名能綁定實作路由功能)
偽靜態
URL_HTML_SUFFIX=〉'' 〉不允許存取的後綴多個用|隔開
下面的優先權高於上面的
URL大小寫'URL_CASE_INSENSITIVE' =>true 不區分大小寫的時候訪問控制器大寫要前加_
系統提供U方法可以為你自動生成相關的URL地址
U 系統提供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 進行回傳資料與碼雖然只有一個字母的差別,但其實他們根本不是一回事:JSON是一種數
據交換格式,而JSONP是一種非官方跨域資料互動協定。一個是描述訊息的格式,一個
是訊息傳遞的
約定方法。
跳轉與重定向
$this->success(提示訊息,位址,秒數)
----==--=-=
輸入變數
可以透過I 函數進行變數擷取與過濾
I 變數類型.變數名',['預設值'],['過濾方法'],['額外資料來源'])
I函數自帶就有DEFAULT_FILTER預設的是htmlspecialchars (變數的篩選)
判斷請求類型(請求類型)
is_XXX 如果是自訂的AJAX則需要加入隱藏域告訴後台是ajax提交的如果是jquery的
話則不需要。可透過VAR_AJAX_SUBMI配置
空操作
自動呼叫_empty(實現錯誤頁和一些url優化)
空控制器系統嘗試設定為EmptyController
操作 前置後置作業需事先定義
-=-=-=-=-=-=-=-=-=-=-=-
模型 大小寫與_轉換
模型類別直接實例化一般都繼承。一般有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();過濾掉落函數可以支援掉函數的函數可以支援掉程式類型的函數或是閉包
定義)
having方法是為了配合group方法從分組的結果中再次查詢。
cache s
comment 註解
Create方法所建立的資料物件是儲存於記憶體中,並沒有實際寫入資料庫中,直到使用add
或save方法才會真正寫入資料庫中,直到使用add
或save方法才會真正寫入資料庫中,直到使用add
或save方法才會真正寫入資料庫中,直到使用add
或save方法才會真正寫入資料庫中,直到使用add
或save方法才會真正寫入資料庫中,直到使用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( ink$map['b'] =array('notlike',array('notliketh)' %tp'),'AND');
exp 表達式查詢(exp查詢的條件不會被當成字串) 所有後面的查詢條件可以使用任何的
據更新。
$data['score'] = array('exp','score+1');// 使用者的積分加1
$User->where('id=5')->save($data); // 依照條件保存修改的資料
多語言套件的支援 L
*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_* _12_1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
多級控制器
實例化控制器
(令牌驗證)token
ORM 表映射到類別記錄映射到物件AR模式ActiveRecord 一種簡單的命令
怎麼帶有prefision支持*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_* _12_1🎜 🎜 以上就介紹了Onthink學習隨筆,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 🎜 🎜 🎜