小談ThinkPHP
ThinkPHP也是一個MVC框架,分視圖、控制器和模型,和Yii框架相比相對較好理解,並且是輕量級的框架(相對於Yii來說),在使用Yii框架時候如果將框架放在項目文件中,用編輯器打開文件都比較慢,親身的體會。TP代碼也分工明確,便於網站的維護和管理。現在也有很多公司在用這個框架。
一、TP的目錄結構
library----------------第三方資源包
ThinkPHP
jquery
kindeditor
application------------應用程序
Common---------------全局公用函數
Home
Common-------------局部公用函數
Conf---------------配置文件
config.php
Controller---------控制器
Model--------------模型
View---------------視圖
Admin
Common-------------局部公用函數
Conf---------------配置文件
config.php
Controller---------控制器
Model--------------模型
View---------------視圖
Runtime--------------運行時(臨時文件)
public-----------------公用文件
images
css
index.php
admin.php (目錄大致是這樣的)
二、命名空間:虛擬的文件夾
1、定義命名空間
namespace 空間名;
namespace hello;
namespace hello\aaa\bbb;
註意:namespace必須出現在整個頁面的第一行
2、導入指定空間下的類
use 空間名\類名;
use hello\Person;//導入hello空間下的Person類
use hello\aaa\Person;//導入hello\aaa下的Person類
作用:解決類的重名問題
註意:命名空間到php5.3的時候,才引入
三、入口文件
<?php header(...); //指定綁定的模塊名 define("BIND_MODULE","模塊名"); //指定應用程序目錄 define("APP_PATH","application/"); //開啟調試模式 define("APP_DEBUG",true); //開啟或關閉目錄安全。開啟後是在每個目錄中生成一個空白的index.html文件 define("BUILD_DIR_SECURE",false); //包含ThinkPHP入口文件 include_once ‘library/ThinkPHP/ThinkPHP.php‘; ?>
註意:
1、每個控制器必須有自己的命名空間
namespace 模塊名\Controller;
2、每個模型必須有自己的命名空間
namespace 模塊名\Model;
3、導入一些命名空間
1)控制器與模型的父類
namespace Think;
library/ThinkPHP/Library/Think/Controller.class.php
namespace Think;
library/ThinkPHP/Library/Think/Model.class.php
2)導入指定空間下的類
use Think\Controller;
use Think\Model;
四、命名規則
.控制器的命名規則
1、必須采用大駝峰的命名規則
2、必須以Controller.class.php來結尾
IndexController.class.php
LoginController.class.php
NewsController.class.php
ReviewsController.class.php
控制器中方法的命名
1、必須采用小駝峰的命名規則
index()
add()
insert()
login()
示例:
<?php namespace Home\Controller; use Think\Controller; class XxxController extends Controller { public function 方法() { //邏輯代碼; $this->assign(key,value); $this->assign(key,value); $this->assign(key,value); $this->display(); } } ?>
模型的命名規則
1、必須采用大駝峰的命名規則
2、必須以表名來命名
3、必須以Model.class.php來結尾
ReviewsModel.class.php
BbsInfoModel.class.php
示例:
<?php namespace Home\Model;//定義命名空間 use Think\Model;//導入父類 class XxxModel extends Model { public $tableName = "省略了前綴的表名"; public $trueTableName = "完整的表名"; } ?>
五、Think標簽
特點:
1、標簽定界符:{}、<>
註意:只有輸出值的標簽用的是{},其他的都用的是<>
2、所有<>標簽,必須都是雙標簽
<標簽></標簽>
<標簽 />
3、assign方法傳過來的key名,有的加$,有的不加$
註意:只有輸出值、if標簽加$,其他的都不加$
標簽:
1、顯示變量值
{$key}
2、顯示數組中的某一個值
{$key.下標}
{$key[下標]}
3、if標簽
<if condition="條件">
內容
<elseif condition="條件"/>
內容
<elseif condition="條件"/>
內容
<else/>
內容
</if>
4、比較標簽
== eq
!= neq
=== heq
!== nheq
< lt
<= elt
> gt
>= egt
5、switch標簽
<switch name="key">
<case value="值1">內容</case>
<case value="值2">內容</case>
<case value="值3">內容</case>
<default/>內容
</switch>
6、for標簽
<for start="起始值" end="結束值" name="循環變量名">
內容,循環變量:{$i}
</for>
7、foreach標簽
<foreach name="key" key="k" item="v">
下標:{$k} 值:{$v}
</foreach>
8、volist標簽
<volist name="key" key="k" id="v">//k是序號而不是鍵名稱
序號:{$k} 值:{$v}
</volist>
9、原樣顯示
<literal>
Think標簽
</literal>
10、php標簽
<php>
php代碼;
php代碼;
php代碼;
</php>
11、包含html文件
<include file="xxxx"/>
<include file="文件夾:文件名"/>
例子:
View
Login
hello.html
<include file="Login:hello"/>
六、ThinkPHP配置文件
1、當前模塊目錄的配置文件
application/Home/Conf/config.php
application/Admin/Conf/config.php
2、全局配置文件
application/Common/Conf/config.php
3、全局配置文件
library/ThinkPHP/Conf/convention.php
配置文件優先級排列順序:
模塊下的配置文件 > application/Common/Conf/config.php > tp資源包中的配置文件
建議:
1、不要修改convention.php配置文件
2、application/Common/Conf/config.php
前後、後臺管理都一樣的配置信息,寫在這裏
3、模塊下的配置文件
存放的都是當前模塊獨立的配置信息
七、url訪問方式(url路由)
1、問號傳參
http://localhost/項目/index.php
http://localhost/項目/index.php?c=控制器&a=方法
http://localhost/項目/index.php?c=控制器&a=方法&名=值
----------
<a href="index.php?c=控制器&a=方法"></a>
<img src="public/images/xxx.jpg">
<link href="public/css/xxx.css">
<script src="library/jquery/jquery-1.4.js">
2、pathinfo模式
http://localhost/項目/index.php
http://localhost/項目/index.php/控制器/方法.html
http://localhost/項目/index.php/控制器/方法/名/值.html
----------
<a href="入口文件地址/控制器/方法/名/值.html"></a>
<img src="根目錄地址/public/images/xxx.jpg">
<link href="根目錄地址/public/css/xxx.css">
<script src="根目錄地址/library/jquery/jquery-1.4.js">
3.
(1)、通過傳統的$_GET方法來獲得
$變量 = $_GET["參數名"];
(2)、給方法加參數
public function 方法名($參數名,$參數名...)
{}
註意:
1)方法中的參數名必須與url中的參數名相同
2)方法中的參數的個數、順序必須與url中的參數相同
(參數的名稱、個數、順序必須全部相同)
八、ThinkPHP系統常量
1、獲得入口文件地址:鏈接地址、跳轉地址
__APP__
2、獲得根目錄地址:css、image、library
__ROOT__
九、ThinkPHP頁面重定向
1、跳轉頁面
$this->redirect("控制器/方法");
2、跳轉頁面,並url傳參
$this->redirect("控制器/方法",array(名=>值,名=>值));
3、跳轉頁面,並提示信息
$this->redirect("控制器/方法",array(),時間,信息);
$this->redirect("控制器/方法",NULL,時間,信息);
十、自定義success頁面
1、在View\Public下新建一個success頁面(自定義的提示信息頁面)
2、控制器中通過$this->success()、$this->error()來調用
$message:提示信息、$jumpUrl:跳轉地址
3、修改配置文件,設置提示信息頁面的路徑
‘TMPL_ACTION_ERROR‘ => ‘Public:success‘, // 默認錯誤跳轉對應的模板文件
‘TMPL_ACTION_SUCCESS‘=> ‘Public:success‘, // 默認成功跳轉對應的模板文件
十一、ThinkPHP中獲得模型對象的方法
1、$model = D("模型文件名");//必須新建模型文件
2、$model = D("表名");//不用新建模型文件
2、$model = M("表名");//不用新建模型文件
註意:表名最好是全部小寫
M("bbsInfo")或D("bbsInfo")--->表名:bbs_info
十二、數據庫操作
1、查詢多條記錄,返回:二維數組
$result = $model->select();
$result = $model->where()->select();
$result = $model->order()->select();
$result = $model->limit()->select();
$result = $model->where()->order()->limit()->select();
2、刪除記錄,返回:受影響的行數
$result = $model->delete();
$result = $model->where()->delete();
3、查詢一條記錄,返回:一維關聯數組
$result = $model->find();
$result = $model->where()->find();
4、修改記錄,返回:受影響的行數
$result = $model->save(一維關聯數組);
$result = $model->where()->save(一維關聯數組);
5、添加記錄,返回:1)受影響的行數,2)新加記錄的主鍵值
$result = $model->add(一維關聯數組);
$result = $model->data(一維關聯數組)->add();
6、執行sql語句,返回:二維數組
$result = M()->query("select語句");
7、執行insert、update、delete語句,返回:受影響的行數
$result = M()->execute("insert|update|delete語句");
8、count查詢,返回:整數
$result = $model->count();
$result = $model->where()->count();
9、sum查詢,返回:數字
$result = $model->sum(字段名);
$result = $model->where()->sum(字段名);
10、avg查詢,返回:數字
$result = $model->avg(字段名);
$result = $model->where()->avg(字段名);
11、max查詢,返回:數字
$result = $model->max(字段名);
$result = $model->where()->max(字段名);
12、min查詢,返回:數字
$result = $model->min(字段名);
$result = $model->where()->min(字段名);
13、字段值自增
$result = $model->where()->setInc("字段名");//加1
$result = $model->where()->setInc("字段名",5);//加5
14、字段值自減
$result = $model->where()->setDec("字段名");//減1
$result = $model->where()->setDec("字段名",5);//減5
在多個頁面需要同樣的代碼段時,可以在Controller文件夾下建立一個BaseController控制器來繼承Controller父類,並且在其中添加方法來實現多個頁面中相同的代碼效果。在各個頁面的控制器中直接繼承BaseController這個類,如下代碼:
class Controller{} class BaseController extends Controller { public function _initialize() {} } class ShowController extends BaseController {} class Person { public function __construct() { if(method_exists($this,_initialize)) { $this->_initialize() } } } class Son { //相當於子類的構造函數 public function _initialize() {} } $s = new Son();
十三、TP自帶的類
ThinkPHP自帶的分頁類
library/ThinkPHP/Library/Think/Page.class.php
分頁類的使用
use Think\Page;
$page = new Page(總記錄數,每頁記錄數=20);
$result= $model->limit($page->firstRow,$page->listRows)->select();
$pageList = $page->show();//分頁欄
ThinkPHP自帶的驗證碼類
library/ThinkPHP/Library/Think/Verify.class.php
1、加載驗證碼
1)控制器裏的代碼
$verify = new Verify();
$verify->length = 5;//字符個數
$verify->fontSize 20;//字符大小
$verify->entry();//顯示驗證碼
2)視圖頁面顯示圖片
<img src="__APP__/控制器/方法">
2、驗證碼的驗證
$verify = new Verify();
$result = $verify->check(用戶輸入的驗證碼);
ThinkPHP自帶的文件上傳類
library/ThinkPHP/Library/Think/Upload.class.php
一種:只上傳一個文件
$upload = new Upload();//實例化
$upload->maxSize = 2000000;//最大大小(以字節為單)
$upload->exts = array("jpg","gif");//允許上傳的文件的擴展名
$upload->autoSub = false;//用時創建一個子目錄
$upload->rootPath = "./";//保存路徑的根目錄
$upload->savePath = "public/upfile/";//保存路徑
//上傳文件
$myFile = $_FILES["myFile"];
$result = $upload->uploadOne($myFile);
二種:多文件上傳
$upload = new Upload();//實例化
$upload->maxSize = 2000000;//最大大小(以字節為單)
$upload->exts = array("jpg","gif");//允許上傳的文件的擴展名
$upload->autoSub = false;//用時創建一個子目錄
$upload->rootPath = "./";//保存路徑的根目錄
$upload->savePath = "public/upfile/";//保存路徑
//上傳文件
$result = $upload->upload();
註意:php.ini中與上傳相關的選項
1、是否支持文件上傳
file_uploads = On|Off
2、上傳文件臨時存儲目錄
;upload_tmp_dir = d:/hello
3、允許上傳的最大文件
upload_max_filesize = 2M
4、同一表單最多可以上傳20個文件
max_file_uploads = 20
5、post表單最大提交的數據量
post_max_size = 8M
6、最多可占用多少內存
memory_limit = 128M
已經好長時間沒有用過TP框架了,大致的功能點也就這麽多......
小談ThinkPHP