-------------------------------------(寫代碼不孤獨_小小代)
用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 ('str *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1????????????????????????????????????????多級控制器實例化控制器distinct (令牌驗證)tokenORM 表映射到類 記錄映射到對象 AR模式 ActiveRecord 一種簡單的命令怎么帶有PRefix就可以啟用本地session管理的支持 *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1
新聞熱點
疑難解答