PHP全棧學習筆記20

image

PHP全棧學習筆記20

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框架的特色

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

相關文章
相關標籤/搜索