1. 程式人生 > >小談ThinkPHP

小談ThinkPHP

lib 自增 php配置 編輯 開啟 reac func deb sig

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