ThinkPHP入门
ThinkPHP項目的創建
<?php include "../../ThinkPHP/ThinkPHP.php";在index.php中導入ThinkPHP.php即可,會自動創建目錄。
tp創建流程分析
1. 入口文件index.php2. ThinkPHP/ThinkPHP.phprequire THINK_PATH.'Common/runtime.php';3. ThinkPHP/Common/runtime.php聲明許多常量信息加載系統核心類文件if(is_file($file)) require_cache($file);自動創建應用目錄build_app_dir();Think::Start(); 4. ThinkPHP/lib/Core/Think.class.phpstatic function start(){}Think::buildApp(); // 預編譯項目引入相關配置文件App::run(); 5. ThinkPHP/lib/Core/App.class.phpstatic public function run(){}App::init();Dispatch分析路由分析路由(控制器MODULE_NAME 方法ACTION_NAME) index.php?c=控制器&a=方法App::exec();通過反射ReflectionMethod使得控制器對象調用對應的方法PHP中的反射
<?phpclass Person{public $name = "xiaoming";function say(){echo "I am ".$this->name;}function run($addr,$age){echo "I am ".$this->name;echo ",I at ".$addr;echo ", my age is ".$age;echo ",running";} } $per = new Person; //$per -> say();//利用反射實現對象調用方法 //$md = new ReflectionMethod(類名,方法名); //反射方法對象 //反射好處:可以獲得 方法的屬性(是否公開的、私有的、受保護的等等) //$md = new ReflectionMethod("Person","say"); //讓指定的對象調用這個方法 //$md -> invoke($per);//通過反射執行帶參數的方法 $mda = new ReflectionMethod("Person","run"); $mda -> invokeArgs($per,array('beijing',23));空操作和空模塊
tp框架把MVC中的控制器稱作是模塊(module) index.php?m=控制器&a=操作
http://網址/index.php/User/login 正常請求
http://網址/index.php/User/beijing “空操作”請求
http://網址/index.php/American/login “空模塊”
用戶訪問一個控制器中不存在的方法,就是空操作。
實例化對象,這個對象去調用類里邊不存在的方法
在OOP中有魔術方法,__call(),自動調用方法,
對象調用類中不存在方法要統一走這個方法
2.空操作處理:
a)在對應的控制器里邊定義方法_empty()
b)給應用添加一個函數名字是:__hack_action() 推薦使用
應用函數庫文件:shop/Common/common.php
3.空模塊(空控制器)
tom=newAmerican();tom是不存在的對象
處理方式:
①定義函數__hack_module() 推薦使用
②給系統定義空模塊:EmptyAction.class.php
跨模塊調用
一個控制器可以實例化另一個控制器,并調用其相關方法
/系統有自動加載機制,會完成控制器類的引入// ThinkPHP/Lib/Core/Think.class.php//$user = new UserAction();//echo $user -> number();//系統給我們提供快捷函數,實現控制器的實例化//A('控制器標志')//A('[項目://][分組/]控制器');//A() ThinkPHP/Common/common.php$user = A('home/User');echo $user -> number();$indx = A("book://Index");echo $indx -> apple();//R("[項目://][分組/]模塊/操作方法") 跨模塊調用函數//實例化控制器并直接調用相關方法//R()方法有封裝A()方法,之后利用對象調用相關操作echo R("home/User/number");echo R("book://Index/apple",array('hello','world'));ThinkPHP數據庫操作
在config.php中配置
//數據庫配置'DB_TYPE' => 'mysql', // 數據庫類型'DB_HOST' => 'localhost', // 服務器地址'DB_NAME' => 'shop', // 數據庫名'DB_USER' => 'root', // 用戶名'DB_PWD' => '111111', // 密碼'DB_PORT' => '', // 端口'DB_PREFIX' => 'sw_', // 數據庫表前綴'DB_FIELDTYPE_CHECK' => false, // 是否進行字段類型檢查////處于性能考慮,把數據表字段放入緩存里邊,//這樣下次訪問就避免執行sql語句重復執行重新獲取//開發調試模式APP_DEBUG=true,下邊緩存無效//生產模式APP_DEBUG=false,緩存有效'DB_FIELDS_CACHE' => true, // 啟用字段緩存//修改模板引擎為smarty'TMPL_ENGINE_TYPE' => 'Smarty', // 默認模板引擎 //在頁面底部顯示日志信息'SHOW_PAGE_TRACE' => true, // 顯示頁面Trace信息實例化數據模型model的三種方法
1.goodsmodel=newGoodsModel();2.goods_model = D(“Goods”); 快捷函數
a)obj=D();//創建了一個基類model的對象,沒有指明具體操作的數據表b)通過這個obj就可以執行原生的sql語句
3.model=M();創建基類model對象a)model = M(‘User’); 創建基類model對象,但是操作的數據表sw_user
查詢數據信息
① Model.class.php類本身就存在該方法,例如(where() field() limit() select())
② __call()自動調用方法集成了一些方法,例如(table() order() group())
這些方法可以進行連貫操作info=obj -> where()->order()->limit()->select()
1.select() 返回二維數組
2.find() 返回一維數組
3.getByXXX(); 根據指定字段進行數據查詢
返回一維數組
getByGoods_price(12000);
getByGoods_name(); 魔術__call();
4.having() 設置查詢條件
與where比較類似
select * from sw_goods where goods_price>100;
select * from sw_goods having goods_price >100;
model聚合函數使用
count() sum() max() avg() min()
執行原生sql語句
model?>query()查詢語句(二維數組返回)model -> execute() 增加、修改、刪除
insert update delete
成功執行返回受影響的記錄數目
添加數據add
兩種方式實現數據添加:數組方式、AR方式
AR規則:
1.數據庫中的每個數據表都對應一個類,model
2.數據表中的每條記錄都是類的一個對象
3.記錄信息的每個字段都是對象的屬性
在tp框架中AR模型是假的
數據查詢有options屬性匯集各種連貫查詢條件
數據添加有data屬性實現各種信息的收集
通過表單form實現數據添加
function add(){$goods_model = D("Goods");//判斷是否提交表單if(!empty($_POST)){//數據添加//foreach($_POST as $k => $v){// $goods_model -> $k = $v;//}$goods_model -> create(); //tp框架本身收集表單數據方法$rst = $goods_model -> add();if($rst){$this -> success('添加成功',__URL__."/showlist");}} else {$this -> display();}}修改數據
查詢:select() 添加:add()
修改關鍵字:save() 返回受影響的記錄數目
添加數據:數組 和 AR
修改數據:數組 和 AR
注意:實現數據修改必須符合兩個條件(主鍵id 或 where條件)
具體案例實現update
以前:http://網址/index.php?m=控制器&a=操作&goods_id=100&goods_price=2300
現在:http://網址/index.php/控制器/操作/參數1/值/參數2/值/參數3/值。。。。。。
tp框架中表單域驗證
表單驗證:
通過tp框架進行表單驗證
先決條件:收集表單數據必須通過create()收集
create()方法內部有集成表單驗證規則
具體使用
//注冊操作function register(){$user_model = D("User");if(!empty($_POST)){show_bug($_POST);$z = $user_model -> create(); //收集數據if($z){//把愛好的數組變為字符串$user_model -> user_hobby = implode(',',$_POST['user_hobby']);$rst = $user_model -> add();if($rst){echo "ok";} else {echo "failure";}} else {//表單域驗證有錯誤show_bug($user_model -> getError());}}else {}$this -> display();}在create()時會發生驗證,驗證的代碼寫在model中
<?phpclass UserModel extends Model{//批量錯誤信息顯示// 是否批處理驗證protected $patchValidate = true;//進行表單域驗證//protected $_validate = array(); // 自動驗證定義protected $_validate = array(//array(驗證字段,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間])array('username','require','用戶名必須填寫'),//密碼必須填寫array('password','require','密碼必須填寫'),//確認密碼必須填寫/與密碼保存一致array('password2','require','確認密碼必須填寫'),array('password2','password','兩次密碼必須一致',0,'confirm'),//驗證郵箱array('user_email','email','郵箱格式必須正確',2),//驗證qq號碼//全部數字、長度5-12位、第一位非0array('user_qq','/^[1-9]\d{4,11}$/','qq格式必須正確'),//手機號碼驗證,正則驗證//學歷必須選擇一項//value值必須在一個范圍內 2,3,4,5,array('user_xueli',array(2,3,4,5),'學歷必須選擇一項',0,'in'),//愛好,必須選擇兩個或以上項目//計算$_POST['user_hobby']這個數組里邊元素的個數array('user_hobby','check_hobby','愛好必須選擇兩項以上',1,'callback'),);//驗證愛好的方法function check_hobby($hobby){//獲取$_POST['user_hobby']具體信息值//這個check_hobby被調用的時候已經把$_POST['user_hobby']//當成是參數給check_hobby了//show_bug($hobby);if(count($hobby) < 2){return false;} else {return true;}}//自定義個性方法進行用戶名和密碼校驗function checkNamePassword(){//sljdlsjdlk} }第四個參數,驗證條件
驗證條件:(可選)包含下面幾種情況:
Model::EXISTS_VALIDATE 或者0 存在字段就驗證(默認)
Model::MUST_VALIDATE 或者1 必須驗證
Model::VALUE_VALIDATE或者2 值不為空的時候驗證
總結
以上是生活随笔為你收集整理的ThinkPHP入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL流浪记(二)—— MySQL介
- 下一篇: PHP之MVC项目实战(三)