thinkphp概述,thinkphp項目構建流程,thinkphp項目結構,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp視圖,thinkphp的內置模板引擎。php
thinkphp是一個免費開源的,快速,簡單的面向對象的輕量級PHP開發框架,遵循Apache2開源協議發佈,是爲了web應用開發和簡化企業級引用開發而誕生的。css
thinkPHP的特色,環境要求等。html
官方網址:mysql
http://thinkphp.cn
複製代碼
svn的下載地址: 完整版:web
http://thinkphp.googlecode.com/svn/trunk
複製代碼
核心版本:sql
http://thinkphp.googlecode.com/svn/trunk/ThinkPHP
複製代碼
thinkphp遵循簡單實用的設計原則,thinkphp框架思想和結構體系進行詳細的介紹:thinkphp
thinkphp的目錄結構,自動生成目錄,項目目錄部署方案,命名規範,項目構建流程。數據庫
thinkphp的目錄結構: 系統目錄和項目目錄數組
系統目錄: common包含框架的一些公共文件,系統定義和慣例配置等。 lang目錄語言文件。 lib系統的基類庫目錄。 tpl系統的模板目錄。 mode框架模式擴展目錄。 vendor第三方類庫目錄。緩存
項目目錄: index.php項目入口文件 common項目公共目錄 lang項目語言包目錄 conf項目配置目錄 lib項目基目錄 tpl項目模板目錄 runtime項目運行時目錄
<?php
define('THINK_PATH','ThinkPHP'); // 定義thinkphp框架路徑
define('APP_NAME', 'test'); // 定義項目名稱
define('APP_PATH', '.'); // 定義項目路徑
require(THINK_PATH."/ThinkPHP.php"); // 加載框架入口文件
App::run(); // 實例化一個網站應用實例
?>
複製代碼
thinkphp自動生成的目錄:
common, conf, lang, lib, runtime, tpl;
項目目錄:
admin:admin後臺管理項目目錄 home:home項目目錄 common:項目公共目錄,放置項目公共函數 conf:項目配置目錄,放置配置文件 lang:項目語言包目錄 lib:項目基目錄,一般包括action和model目錄 runtime:項目運行時目錄,包括cache,temp,data和log tpl:項目模板目錄 thinkphp: thinkPHP系統目錄 admin.php: admin.php網站的後臺入口文件 index.php: index.php網站的入口文件
分組模塊:
app: app項目目錄 common: 項目公共目錄 conf: 項目配置目錄 lang: 項目語言包目錄 lib: 項目基目錄 runtime: 項目運行時目錄 tpl: 項目模板目錄 public: public網站公共目錄 css: css樣式文件夾 images: 圖片文件夾 js: js腳本文件夾
thinkphp系統目錄 index.php網站入口文件
thinkphp建立項目流程:
建立數據庫,數據表,項目命名建立入口文件,項目配置,建立控制類,建立模型類,建立模板文件,運行測試。
<?php
return array(
'APP_DEBUG' => true, // 開啓調式模式
'DB_TYPE' => 'mysql', // 數據庫類型
'DB_HOST' => 'localhost', // 數據庫服務器地址
'DB_NAME' => 'db_database', // 數據庫名稱
'DB_USER' => 'root', // 數據庫用戶名
'DB_PWD' => 'root', // 數據庫命名
'DB_PORT' => '3306', // 數據庫端口
'DB_PREFIX' => 'think_', // 數據表前綴
);
?>
複製代碼
<?php
class IndexAction extends Action{
public function index(){
$db = new Model('user'); // 實例化模型類,參數數據表名稱,不包含前綴
$select = $db -> select(); // 查詢數據
$this -> assign('select', $select); // 模板變量賦值
$this -> dispaly('index.html'); // 輸出模板
}
}
?>
複製代碼
模板文件:
<body>
<volist name="select" id="user">
id:{$uer.id}<br/>
用戶名:{$user.user}<br/>
地址:{$user.address}<hr>
</volist>
</body>
複製代碼
thinkphp配置
配置文件時thinkphp框架程序得以運行的基礎文件。
慣例配置,項目配置,調式配置,分組配置,模塊配置,動態操做配置。
返回PHP數組的方式,全部配置文件的定義格式
<?php
return array(
);
?>
複製代碼
進行二維數組進行配置
<?php
return array(
'APP_DEBUG' => true,
'USER_CONFIG' =>array(
'USER_AUTH' => true,
...
),
);
?>
複製代碼
調試配置
配置文件位於 think\common\debug.php
複製代碼
配置文件存儲位置,調式配置文件位於項目配置目錄下 系統默認的調試配置文件: 開啓日誌記錄 關閉模板緩存 記錄sql日誌 關閉字段緩存 開啓運行時間詳細顯示 開啓頁面trace信息展現 嚴格檢查文件大小寫
thinkPHP的控制器
模塊類,存儲於lib\action目錄下: 控制器類必須繼承系統的action基礎類
跨模塊調用
$User = A("User"); // 實例化UserAction控制器對象
$User -> insert(); // 調用User模塊的importUser操做方法
A("User")是一個快捷方法
等效於:
import("@.Action.UserAction");
$User = new UserAction();
還有比A更好的方法爲:
R("User","insert"); // 遠程調用UserAction控制器的insert操做方法
$User = A("User","Admin"); // 實例化Admin項目的UserAction控制器對象
$User -> insert(); // 調用Admin項目UserAction控制器的insert操做方法
R("User", "insert", "Admin"); // 遠程調用admin項目的useraction控制器的insert操做方法
複製代碼
<?php
header("Content-Type:text/html; charset=uft-8"); // 設置頁面編碼格式
class IndexAction extends Action {
public function index() {
$db = new Model('user'); // 實例化模型類,參數數據表名稱,不包括前綴
$select = $db->select(); // 查詢數據
$this -> assign("select", $select); // 模板變量賦值
$this -> dispaly(); // 輸出模板
}
}
?>
複製代碼
<?php
header("Content-Type:text/html; charset=utf-8"); // 設置頁面編碼格式
class UserAction extends Action{
public function insert(){
$ins = new Model("user"); // 實例化模型類,傳遞參數爲沒有前綴的數據表名稱
$ins -> Create(); // 建立數據對象
$result = $ins -> add(); // 寫入數據庫
$this -> redirect('Index/index', '', 5, '頁面跳轉中'); // 頁面重定向
}
}
?>
複製代碼
<?php
header("Content-Type:text/html; charset=utf-8"); // 設置頁面編碼格式
class IndexAction extends Action{
public function index() {
$db = new Model('user'); // 實例化模型類,參數數據表名稱,不包含前綴
$select = $db -> select(); // 查詢數據
$this->assign('select',$select);//模板變量賦值
$this->display(); // 輸出模板
}
public function insert(){
$ins = R("User", "insert", "Admin"); // 遠程調用admin項目useraction控制器的insert操做方法
$ins->Create(); // 建立數據對象
$result = $ins->add(); // 寫入數據庫
}
}
?>
複製代碼
thinkphp的模型
模型是按照某一個形狀進行操做的代名詞。 模型的主要做用就是封裝數據庫的相關邏輯。 主要內容: 模型的命名 實例化模型 屬性訪問 鏈接數據庫 建立數據 連貫操做 curd操做
實例化基礎模型類
$User = new Model('User');
$User -> select();
複製代碼
$User = M('User');
$User -> select();
複製代碼
m方法默認是實例化model類,若是須要實例化其餘模型類:
$User = M('User', 'CommonModel');
複製代碼
$User = new CommonModel('User');
複製代碼
實例化用戶定義的模型類
// 定義的模型類放到項目lib\model目錄下面
class UserModel extends Model{
public function myfun() {
// 。。。
}
}
複製代碼
實例化自定義模型類的方式:
$User = new UserModel();
$User->select(); // 進行其餘的數據操做
複製代碼
$User = D('User');
$User -> select(); // 進行其餘的數據操做
複製代碼
D方法能夠自動檢測模型類,不存在時系統會拋出異常,同時對於實例化過的模型,不會重複去實例化。
$User = D('User','Admin'); // 實例化admin項目下面的User模型
$User->select();
若是啓動模塊分組功能,還能使用:
$User=D('Admin.User');
複製代碼
實例化空模型類
$Model = new Model();
// $Model = M();
$Model -> query('SELECT *FROM think_user where status=1');
複製代碼
<?php
$User = new Model('User');
$User -> find(1);
echo $User -> name;
$User -> name = 'ThinkPHP';
?>
操做方法是經過返回數組的方式:
<?php
$Type=D('Type'); // 返回的type數據是一個數組
$type= $Type->find(1);
echo $type['name']; // 獲取type屬性的值
$type['name'] = 'ThinkPHP'; // 設置type屬性的值
?>
複製代碼
鏈接數據庫: thinkphp內置抽象數據庫訪問層,把不一樣的數據庫操做封裝起來,只須要使用公共的Db類進行操做。
<?php
return array(
'APP_DEBUG' => false, // 關閉調用模式
'DB_TYPE' => 'mysql', // 數據庫類型
'DB_HOST' => 'localhost', // 數據庫服務器地址
'DB_NAME' => ‘db_database’, // 數據庫名稱
'DB_USER' => 'root', // 數據庫用戶名
'DB_PWD' => 'root', // 數據庫密碼
'DB_PORT' => '3306'; // 數據庫端口
'DB_PREFIX' => 'think_',
);
?>
複製代碼
鏈接數據庫
使用dsn方式在初始化db類的時候傳參數。
$db_dsn="mysql://root:admin@127.0.0.1:3306/db_database";//定義dsn
$db = new Db();// 執行類的實例化
$conn=$db->getInstance($db_dsn);// 鏈接數據庫
數組傳參
$dsn = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
'hostport' => '3306',
'database' => 'dbname'
);
$db = new Db();
$conn = $db->getInstance($dsn); // 鏈接數據庫,返回數據庫驅動類
複製代碼
模型類裏面定義參數:
protected $connection = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
'hostport' => '3306',
'database' => 'dbname'
);
//或者使用下面的方式:
protected $connection = "mysql://username:password@localhost:3306/DbName";
複製代碼
使用pdo方式鏈接數據庫:
return array(
'DB_TYPE' => 'pdo',
'DB_DSN'=>'mysql:host=localhost;dbname=db_database',
'DB_USER'=>'root',
'DB_PWD'=>'root',
'DB_PREFIX'=>'think_',
'APP_DEBUG' => false, // 關閉調試模式
);
複製代碼
自動根據表單數據建立數據對象
class UserAction extends Action { // 定義類,繼承基礎類
public function insert() { // 定義方法
$ins = new Model('user'); // 實例化模型類
$ins -> Create(); // 建立數據庫
$result = $ins -> add(); // 寫入數據庫
$this-> redirect('Index/index', '', 5, '頁面跳轉中'); // 頁面重定向
}
}
複製代碼
curd操做
thinkphp提供了靈活和方便的數據庫操做方法,curd建立,更新,讀取,和刪除。
$User = M("User"); // 實例化對象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gamil.com';
$User -> add($data);
$User->data($data)->add();
複製代碼
讀取數據的方法:
讀取字段的值使用getField方法 讀取數據使用find方法 讀取數據集使用select方法
getField方法讀取某個字段的值
$User = M('User');
$nickname = $User->where('id=3') -> getFielde(‘nickname’);
$list = $User->getField('id, nickname');
複製代碼
select 方法的返回值是一個二維數組,若是沒有查詢到如何結果的話,返回一個空的數組
$User=M('User');
$list = $User->where('status=1') -> order('create_time') -> limit(10) -> select();
複製代碼
find()方法
$User = M("User");
$User->where('status=1 and name="think" ')->find();
複製代碼
<?php
header("Content-Type: text/html; charset=utf-8"); // 設置頁面編碼格式
class IndexAction extends Action{
public function index(){
$db=M('User');
$select = $db->where('user="mr"')->order('id desc')->limit(3)->select();
$this->assign('select',$select); // 模板變量賦值
$this->display(); // 指定模板頁
}
public function insert() {
$dba = M('User');
$data['user'] = 'fs';
$data['pass'] = md5('gdsoft');
$data['address'] = 'dashu';
$result = $dba -> add($data);
if($result) {
$this->redirect('Index/index', '', 2, '頁面跳轉中');//頁面重定向
}
}
?>
複製代碼
$User = M("User");
$data['name'] = 'ThinkPHP';
$data['email']='ThinkPHP@mail.com';
$User -> where('id=5') -> save('data');
複製代碼
$User = M('User');
$User -> where('id=5') -> delete();
$User = M('User');
$User -> where('status=0') ->order('create_time')->limit('5')->delete();
複製代碼
thinkphp框架的特色
什麼是mvc?
mvc是一種經典的程序設計理念,分3部分: 模型層,視圖層,控制層。
什麼是模型層? 模型層是應用程序的核心部分,能夠是一個實體對象或一種業務邏輯。
視圖層提供應用程序與用戶之間的交互界面。
控制層用於對程序中的請求進行控制。
什麼是CURD?
C爲建立,U爲更新,R爲讀取,D爲刪除。
thinkphp使用add(),save(),select(),和delete()
什麼是單一入口?
自動生成項目目錄:
<?php
define('THINK_PATH','ThinkPHP'); // 定義ThinkPHP框架路徑
define('APP_NAME', '1'); // 定義項目名稱
define('APP_PATH', '.'); // 定義項目路徑
require(THINK_PATH."/ThinkPHP.php"); // 加載框架入口文件
App::run(); // 實例化一個網站應用實例
?>
複製代碼
項目流程:
<?php
define('THINK_PATH', '../ThinkPHP/'); // 定義ThinkPHP框架路徑
define('APP_NAME', '2'); // 定義項目名稱和路徑
define('APP_PATH', '.'); // 定義項目名稱和路徑
require(THINK_PATH."/ThinkPHP.php"); // 加載框架入口文件
App::run(); // 實例化一個網站應用實例
?>
複製代碼
config.php
<?php
return array(
'APP_DEBUG' => true, // 開啓調試模式
'DB_TYPE'=> 'mysql', // 數據庫類型
'DB_HOST'=> 'localhost', // 數據庫服務器地址
'DB_NAME'=>'db_database', // 數據庫名稱
'DB_USER'=>'root', // 數據庫用戶名
'DB_PWD'=>'rot', // 數據庫密碼
'DB_PORT'=>'3306', // 數據庫端口
'DB_PREFIX'=>'think_', // 數據表前綴
);
?>
複製代碼
<?php
class IndexAction extends Action{
public function index() {
$db = new Model('user'); // 實例化模型類,參數數據表名稱,不包含前綴
$select = $db->select(); // 查詢數據
$this->assign('select',$select); // 模板變量賦值
$this->display(); // 輸出模板
}
}
?>
複製代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ThinkPHP開發流程</title>
</head>
<body>
<!--循環輸出查詢結果數據集-->
<volist name='select' id='user' >
ID:{$user.id}<br/>
用戶名:{$user.user}<br/>
地址:{$user.address}<hr>
</volist>
</body>
</html>
複製代碼
<?php
define('THINK_PATH', '../ThinkPHP'); //定義ThinkPHP框架路徑(相對於入口文件)
define('APP_NAME', '3'); //定義項目名稱
define('APP_PATH', '.'); //定義項目路徑
require(THINK_PATH."/ThinkPHP.php"); //加載框架入口文件
App::run(); //實例化一個網站應用實例
?>
複製代碼
smarty模板技術
什麼是smarty,特色,模板的安裝和配置的方法,設計方法等
<?php
include_once("../config.php");
$arr = array('computerbook','name' => 'PHP','unit_price' => array('price' => '¥65.00','unit' => '本'));
$smarty->assign('title','使用Smarty讀取數組');
$smarty->assign('arr',$arr);
$smarty->display('02/index.html');
?>
複製代碼
<?php
include '../config.php';
$smarty->assign('title','Smarty保留變量');
$smarty->display('03/index.html');
?>
複製代碼
<?php
include_once '../config.php';
$smarty->display('04/index.html');
?>
複製代碼
<?php
include_once "../config.php";
$smarty->assign("title","if條件判斷語句");
$smarty->display("06/index.html");
?>
複製代碼
好了,歡迎在留言區留言,與你們分享你的經驗和心得。
感謝你學習今天的內容,若是你以爲這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。
感謝!承蒙關照!您真誠的讚揚是我前進的最大動力!