PHP全棧學習筆記20

image

PHP全棧學習筆記20
thinkphp概述,thinkphp專案構建流程,thinkphp專案結構,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp檢視,thinkphp的內建模板引擎。
thinkphp是一個免費開源的,快速,簡單的面向物件的輕量級PHP開發框架,遵循Apache2開源協議釋出,是為了web應用開發和簡化企業級引用開發而誕生的。
thinkPHP的特點,環境要求等。
官方網址:
http://thinkphp.cn
svn的下載地址:
完整版:
http://thinkphp.googlecode.com/svn/trunk
核心版本:
http://thinkphp.googlecode.com/svn/trunk/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:[email protected]: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'] = '[email protected]'; $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']='[email protected]'; $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框架的特點

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

image

image