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"); ?>
好了,歡迎在留言區留言,與你們分享你的經驗和心得。
感謝你學習今天的內容,若是你以爲這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。
感謝!承蒙關照!您真誠的讚揚是我前進的最大動力!