-------------------------------------(寫代碼不孤獨_小小代)
用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('路由表達式','路由地址','傳入參
數')
路由表達式
正則表達式 /^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