ThinkPhp 筆記

控制器

新建控制器的定義

1/聲明命名空間 app\模塊\controller

2/控制器文件名首字母大寫薇搁,采用駝峰命名

3/控制器名和文件名對應(yīng)

控制器名字采用駝峰命名? 那么訪問時(shí)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)為全小寫 ThinkPhp? 用方法

加載頁面

1/用系統(tǒng)函數(shù)view()

2/用系統(tǒng)類 view中的fecth方法

3/繼承系統(tǒng)控制器Controller 用父級方法 fecth

數(shù)據(jù)的輸出

1/字符串可以用return

2/'default_return_type'? 可以設(shè)置一個(gè)數(shù)據(jù)返回格式 默認(rèn)是Html

3/'default_ajax_return' ajax返回的類型

初始化

繼承系統(tǒng)控制器后就可以用_initialize初始化方法

只要調(diào)用當(dāng)前控制器下的任意方法 都會(huì)先調(diào)用初始化方法

作用:可以提取控制器下公共的代碼痴突,后臺(tái)權(quán)限把控

前置操作

繼承系統(tǒng)控制器用protected $beforeActionList數(shù)組:裝前置方法順序

這些方法會(huì)在調(diào)用任意的方法前執(zhí)行? 有except 和only的用法


路由

路由的作用

1/簡化url地址,方便大家記憶

2/有利于搜索引擎的優(yōu)化

入口文件

1/前后臺(tái)分離? 在Public目錄下新建一個(gè)admin.php

2/綁定模塊 實(shí)現(xiàn)功能:Index只能前臺(tái)模塊 admin只能去后臺(tái)模塊?

具體操作:

define("BIND_MODULE","模塊名")

// 開啟入口文件自動(dòng)綁定模塊

auto_bind_module? =>? true? 如果文件名和模塊名都是一致的那么久不需要再綁定

3/url地址改變

可以省略模塊

www.tp.com/admin.php/控制器/方法

隱藏入口文件

1/開啟apache重寫? conf/httpd.conf

注意

1/關(guān)閉路由? 寫在加載引導(dǎo)框架之后

2/支持三種方式的URL解析規(guī)則

3/路由只針對應(yīng)用昼丑,不針對模塊,因此路由的設(shè)置也是針對應(yīng)用下面的模塊

設(shè)置路由在app/route中

1/靜態(tài)地址路由

Route::rule("1","2")用1代替2

2/動(dòng)態(tài)路由

http://www.tp.com/coure/1

Route::rule("time/:year/:mouth","2")year 和mouth是動(dòng)態(tài)參數(shù)隨當(dāng)前時(shí)間變化 time是靜態(tài)

全動(dòng)態(tài)路由ROute::rule(":a/:b","2")

可選參數(shù)路由Route::rule(":year/[:mouth]","2")mouth參數(shù)選填

3/完全匹配路由

http://www.tp.com/year

http://www.tp.com/year/1

Route::rule("year$","2")

year后不能帶其他 要完全的匹配

路由請求類型

默認(rèn)支持所有請求類型 *

支持Post請求

Route::post()

Route::rule()第三參數(shù)是post

支持所有

Route::any

Route::rule第三參數(shù)*

模擬put個(gè)delete? :請求必須是post? 隱藏域 hidden

路由參數(shù)主要設(shè)置的是路由的后綴

index GET blog ? ? ? ? index? 后臺(tái)展示

create GET blog/create create 添加頁面

save POST blog ? ? ? ? save? 增加操作

read GET blog/:id read?

edit GET blog/:id/edit edit? 修改頁面

update PUT blog/:id update

delete DELETE blog/:id delete

快捷路由 路由里的方法是a

那么在php中的方法應(yīng)該是geta


模型

1/新建模型

手動(dòng)創(chuàng)立

命令創(chuàng)建

*注意

數(shù)據(jù)庫庫建議和model名一致

如果不一致,可以設(shè)置表名? ? protected $table=""

如果表明有下劃線yhw_user,模型名應(yīng)該寫成yhwUser

2/用模型

實(shí)例化數(shù)據(jù)模型

使用Loader::model()

使用助手函數(shù)model

-------------------------------------------------------------------------

查找

查詢單條數(shù)據(jù)

get方法 get(條數(shù))或者get([名=>值])

get(function($query){sql語句})

查找多條數(shù)據(jù)

User::all()

User::select

查找某個(gè)值

User::where()->value()

查找某列值

User::colum()

動(dòng)態(tài)查詢 只能獲取查詢到的第一條數(shù)據(jù)

getBy+字段名

User::getByAge()

-----------------------------------------------------------------

新增

增加單條數(shù)據(jù) $user->save()

設(shè)置屬性

通過data方法

實(shí)例化

如果有數(shù)據(jù)庫不存在字段可以用用allowField(ture)來屏蔽

也可以指定哪些字段的寫入 allowField(["name","age"])只有name age可以添加

增加多條數(shù)據(jù)

$array二維數(shù)組放入數(shù)據(jù)? $user->saveAll($array)

--------------------------------------------------------------------

刪除

刪除一條數(shù)據(jù)

$user=User::get(1)

$user=delete()

destory(1)

刪除多條數(shù)據(jù)

destory(1,23,4)

destory([1,2,3,4])

條件刪除

destory(["name"=>"dad"])

destory(function($query){$query->where("id",">",2)})

$user=User::where("id",">",2)->delete()

-----------------------------------------------------------------

更新

直接一條

$user=User::get(1)

$user->age=19;

$user->name=23;

$user->save()

數(shù)組修改

$user=new User;

$user->save(["name"=>dsad,"age"=>13],["id"=>1])

$data=[...]? ? $user->saveAll($data)

post修改

$user->allowField(限制)->save($_POST,["id"=>11])

條件修改

User::where()->updata

--------------------------------------------------------

增加

$user=new User;

$user->save();

查找

$user=new User

$user->get()

修改

$user=new User

$user->save([],[哪一條])

刪除

User::destory()

post

增加

$user = new User($_POST);

$user->allField()->save()

$user=new User()

$user->allowField(true)->save($_POST,['id' => 1]);

-----------------------------------------------------------

聚合

統(tǒng)計(jì)

User::count()

User::where()->count()

最大最小值

User::max

User::min

平均值

User::avg()

User::sum()

--------------------------------------------------------------

獲取器

用方法$user->toArray()

$user->sex

要經(jīng)過獲取器處理

但是用$user->getData

就不經(jīng)過獲取器處理

獲取器名 get字段名Attr()

可用數(shù)組或者swich 來書寫原則

-------------------------------------------------------------

修改器

在數(shù)據(jù)賦值時(shí)自動(dòng)經(jīng)行轉(zhuǎn)化處理

set字段名Attr()

自動(dòng)完成

沒有手動(dòng)賦值的情況下經(jīng)行手動(dòng)處理

protected $auto = []; 修改增加都執(zhí)行

protected $insert = ['ip','status' => 1]; 增加的時(shí)候執(zhí)行?

protected $update = ['login_ip'];? 修改數(shù)據(jù)執(zhí)行

--------------------------------------------------------------

時(shí)間戳在配置文件中或者在模型中設(shè)置

可以自動(dòng)寫入時(shí)間戳

protected $createTime = 'create_at';

protected $updateTime = 'update_at';

可以寫入時(shí)間更新時(shí)間的字段名

protected $updateTime = false;取消更新時(shí)間

protected $autoWriteTimestamp = false;// 關(guān)閉自動(dòng)寫入時(shí)間戳

--------------------------------------------------------------

軟刪除 數(shù)據(jù)庫中數(shù)據(jù)存在但get方式獲取不到

軟刪除只能用User::destroy

獲取軟刪除數(shù)據(jù)

User::withTrashed()->find();

User::withTrashed()->select();

僅僅想查看軟刪除數(shù)據(jù)

User::onlyTrashed()->find();

User::onlyTrashed()->select();


配置

配置文件格式

1/以數(shù)組為主

配置的形式

1/慣例配置 think/convention.php

2/應(yīng)用配置 app/config.php

3/擴(kuò)展配置(屬于上一配置的分類) app/database app/extra

4/環(huán)境配置(不同工作環(huán)境中的應(yīng)用配置)? 修改app_status=>home 并在app中新建home.php 書寫相關(guān)配置即可

5/模塊配置? 每個(gè)模塊不同配置 所以在index中新建config.php經(jīng)行配置

6/動(dòng)態(tài)配置? 臨時(shí)型配置? 就是改寫配置

讀取配置

系統(tǒng)類:config("")

使用use:\think\Config::get()

也可以先use引入config 就用Config::get()調(diào)用

//獲取數(shù)組時(shí)應(yīng)該注意? 獲取數(shù)組中的某一元素用.代替[]

讀取擴(kuò)展配置

config("擴(kuò)展名.擴(kuò)展項(xiàng)")

改寫配置

config("參數(shù)1","參數(shù)2")

給參數(shù)1配置參數(shù)2

\think\Config::set(參數(shù)1敬扛,參數(shù)2)

優(yōu)先級

動(dòng)態(tài)配置-模塊配置-擴(kuò)展配置-場景配置--應(yīng)用配置-慣例配置

實(shí)現(xiàn)原理? 后面加載的數(shù)據(jù)把前面加載的數(shù)據(jù)經(jīng)行同名覆蓋

環(huán)境變量配置

在www/tp5中新建.evn(不能出現(xiàn)中文)

獲取壞境變量

通過系統(tǒng)類

\think\Env::get(參數(shù))

不能讀取整個(gè)數(shù)組

使用

1/打開配置文件? 引入use \think\Evn

在需要修改的變量后 如? app_debug=>Evn::get("app_debug",false)

這樣只用在.evn中改變就可以


www.top.com 域名

index.php入口文件

Index前臺(tái)

uer控制器名

index類名

test方法

命名空間與目錄有關(guān)

www/tp5/application/index/controller

namesapce app/index/controller

同名的時(shí)候取別名 as name

創(chuàng)建一個(gè)控制器或者模塊 :

在app/index/controller中創(chuàng)建

1/控制器的文件名首字母大寫

2/控制器必須聲明命名空間

3/控制器中類名必須和文件名一致

調(diào)用當(dāng)前模塊的控制器

1/使用命名空間調(diào)用(面向?qū)ο螅?/p>

3/使用use url? ? $model=new User

2/系統(tǒng)方法controller('模塊/控制器')

調(diào)用當(dāng)前控制器的方法

1/面向?qū)ο? self::? this->

2/系統(tǒng)方法? action()

調(diào)用其它控制器方法

1/面向?qū)ο?先加載其他頁面實(shí)例對象再調(diào)用

2/action(該文件方法)

調(diào)用后臺(tái)模塊方法

1/面向?qū)ο?/p>

2/action(url)

TP的流程:

入口文件index.php

1/定義目錄常量

2/加載框架的引導(dǎo)目錄

加載框架引導(dǎo)目錄thinkphp\start.php

1/引導(dǎo)基礎(chǔ)文件

加載框架的基礎(chǔ)引導(dǎo)文件 ThinkPhp/base

1/加載了系統(tǒng)常量

2/引入了一個(gè)loder類 是一個(gè)自動(dòng)加載類

3/引入環(huán)境變量

4/注冊自動(dòng)加載和異常處理機(jī)制

5/加載慣例配置

運(yùn)行應(yīng)用 think/app.php下的run方法

1/加載了當(dāng)前控制器中的initCommon方法

2/加載當(dāng)前控制器中的 init方法(加載各種配置文件,公共文件)

3/設(shè)置時(shí)區(qū)

4/加載當(dāng)前控制器中的routeCheck 路由檢測

5/調(diào)用控制器中的exec方法(根據(jù)用戶的請求進(jìn)行分發(fā)處理)

6/根據(jù)不同的請求類型加載對應(yīng)的文件

響應(yīng)輸出 :用戶界面



請求和相應(yīng)

如何獲取請求類1/系統(tǒng)函數(shù)$request=request() 2/Request類是一個(gè)單列類 所以要用$request=Request::instance 不能直接new3/系統(tǒng)類引入Controller 和 Request 方法name(Rquest $request)實(shí)例化請求類可用$request->來獲取各種信息$request->param 獲得地址欄的參數(shù)有Only 和 expect 兩種可用方法判斷變量是否存在input('?post.name'); 或者$request->has('name')讀取參數(shù)input('get.id') 或者 $request->get(id)---------------------------變量的過濾$request->filter('htmlspecialchars');<" (小于)和 ">" (大于)轉(zhuǎn)換為 HTML 實(shí)體:防止惡意數(shù)據(jù)對數(shù)據(jù)庫的影響$request->filter('strip_tags'),函數(shù)剝?nèi)プ址械?HTML、XML 以及 PHP 的標(biāo)簽朝抖。strtolower把所有字符轉(zhuǎn)換為小寫FILTER_VALIDATE_EMAIL 過濾器把值作為電子郵件地址來驗(yàn)證啥箭。注意:filter是全局過濾get('name','','htmlspecialchars'); get局部過濾,針對變量進(jìn)行過濾如想進(jìn)行md5加密get('name','','htmlspecialchars治宣,md5'); ----------------------------------------------獲取部分變量或者排除部分變量用only expect 第二個(gè)參數(shù)是請求類型$request->only('name',post)-------------------------------------變量的修飾符->get('id/d'); 強(qiáng)制轉(zhuǎn)化為整形修飾符作用s強(qiáng)制轉(zhuǎn)換為字符串類型d強(qiáng)制轉(zhuǎn)換為整型類型b強(qiáng)制轉(zhuǎn)換為布爾類型a強(qiáng)制轉(zhuǎn)換為數(shù)組類型f強(qiáng)制轉(zhuǎn)換為浮點(diǎn)類型變量的更改$request->get(['id'=>10])請求類型$request->isGet 系統(tǒng)類request()->inGet 系統(tǒng)函數(shù)---------------------------------------模擬PUT請求1/表單類型是POST請求2/需要設(shè)置隱藏域急侥,傳遞模擬的請求類型模擬ajax和Pjax請求http://localhost/index?_ajax=1 http://localhost/index?_pjax=1 ------------------------------------------偽靜態(tài)在配置文件config中可以設(shè)置 后綴偽靜態(tài)可以用$request->ext()訪問后綴偽靜態(tài)-----------------------------------------參數(shù)綁定1/參數(shù)的綁定的個(gè)數(shù),少于地址欄參數(shù)的個(gè)數(shù)2/參數(shù)綁定的名字侮邀,必須和地址欄參數(shù)名字一一對應(yīng)3/參數(shù)綁定可以設(shè)置默認(rèn)值


視圖

加載試圖

1/繼承控制器 $this->fetch

2/助手函數(shù) view()

模板賦值

assign("使用名","變量名")

assign(["使用名"=>內(nèi)容])

在頁面中用{$使用名}

模板替換

全局替換可以在配置文件中修改view_replace_str

部分替換fetch和view的第三個(gè)參數(shù)["新路徑"=>"要代替的路徑"]

指定加載頁面

$this->fetch("頁面名")

fetch 和 view

參數(shù)1坏怪,參數(shù)2,參數(shù)3绊茧,參數(shù)4

字符串铝宵,數(shù)組,數(shù)組华畏,數(shù)組

模板渲染鹏秋,模板賦值,模板替換亡笑,

------------------------------------------------------------

{}是模板標(biāo)簽

使用函數(shù)

1/

{$pass|md5}使用md5加密

{$date|data="y-m-d h:i:s,###"}

{$pass|strtosupper|substr=0,10}

2/

{:md5($pass)}

:代表要使用函數(shù)

三元用算符

{$status?0,1}

運(yùn)算

{$a/$b}? {$a*$b}

防止解析

{literal}{/literal}

系統(tǒng)變量輸出

支持輸出 $_SERVER侣夷、$_ENV、 $_POST仑乌、 $_GET百拓、 $_REQUEST、$_SESSION和 $_COOKIE變量

1/

$_SERVER[""]

2/

$Think.get.id

------------------------------------------------------------

常量輸出

配置輸出? 詳見文件

---------------------------------------------------------------

包含文件

{include file=""}

----------------------------------------------------------------

模板布局? 提取公共部分

1/新建一個(gè)文件在view下

2/在非公共頁面部分用{__CONTENT__}只能存在一個(gè)

3/在非公共頁面中 引入公共頁面{layout name="" /}

模板繼承? 如果想替換多個(gè)區(qū)域

1/新建一個(gè)文件base在view下

2/在base中將其用{block name}{/block}分割

3/使用繼承? 在使用頁面{extend name="base"}

在{block name""}中寫相關(guān)內(nèi)容 內(nèi)容可以是引入的

{/block}

---------------------------------------------------------------

內(nèi)置標(biāo)簽

循環(huán)

1/volist循環(huán)

{volist name="需要遍歷的數(shù)據(jù)名" id="val" offset="起始位置" length="截取數(shù)據(jù)長度"}{val.id}{/volist}

mod 與當(dāng)前循環(huán)次數(shù)取余數(shù)? value 余數(shù)的值? 用于對不同行的操作

empty 數(shù)據(jù)為空時(shí)

key 循環(huán)的次數(shù)

2/foreach循環(huán)

{foreach name="遍歷的數(shù)據(jù)名" item="val"? key="遍歷的次數(shù)"}{/foreach}

3/for循環(huán)

{for start="開始值" end="結(jié)束值" comparison="條件" step="步數(shù)" name="循環(huán)的變量名"}

{for start=1 end=10 comparion="elt" step=1 name=abc}

相當(dāng)于 for($i=1,i<10,i++)

4/比較標(biāo)簽

eq或者 equal 等于

neq 或者notequal 不等于

gt 大于

egt 大于等于

lt 小于

elt 小于等于

heq 恒等于

nheq 不恒等于

都是雙標(biāo)簽

5/if

{if contdition="a=b"}

a等于b

{else/}a不等于b

{/if}

6/switch

{switch name=""}

{case value=""}1{/case}

{default/}2

{/switch}

7/in

{in name="a" value=1,23,4}

a在1晰甚,23衙传,4范圍內(nèi)

{/in}

8/between

{between name="a" value=0,9}

a是否在0到9內(nèi)

{/between}

{notbetween name=a value=0,3}

a不在0到3內(nèi)

{/notbetween}



數(shù)據(jù)庫的配置文件

1/配置鏈接數(shù)據(jù)庫

設(shè)置數(shù)據(jù)庫名 賬號 密碼 端口等 datebase.php中

使用系統(tǒng)類

導(dǎo)入Db類

$DB= new DB;

$date=$DB::table("admin")->select();

dump($date);

使用sql語句

$date=$Db::query("sql語句")

2/使用方法進(jìn)行鏈接

Db::connect(數(shù)據(jù)庫類型://用戶名:密碼@數(shù)據(jù)庫地址:數(shù)據(jù)庫端口/數(shù)據(jù)庫名#字符集)

3/模型鏈接

用命令行 創(chuàng)建一個(gè)model模型php

在該文件中使用數(shù)組配置連接數(shù)據(jù)庫? Model名要是表名

protected $connection = [

? ? ? ? // 數(shù)據(jù)庫類型

? ? ? ? 'type'? ? ? ? => 'mysql',

? ? ? ? // 數(shù)據(jù)庫連接DSN配置

? ? ? ? 'dsn'? ? ? ? => '',

? ? ? ? // 服務(wù)器地址

? ? ? ? 'hostname'? ? => '127.0.0.1',

? ? ? ? // 數(shù)據(jù)庫名

? ? ? ? 'database'? ? => 'thinkphp',

? ? ? ? // 數(shù)據(jù)庫用戶名

? ? ? ? 'username'? ? => 'root',

? ? ? ? // 數(shù)據(jù)庫密碼

? ? ? ? 'password'? ? => '',

? ? ? ? // 數(shù)據(jù)庫連接端口

? ? ? ? 'hostport'? ? => '',

? ? ? ? // 數(shù)據(jù)庫連接參數(shù)

? ? ? ? 'params'? ? ? => [],

? ? ? ? // 數(shù)據(jù)庫編碼默認(rèn)采用utf8

? ? ? ? 'charset'? ? => 'utf8',

? ? ? ? // 數(shù)據(jù)庫表前綴

? ? ? ? 'prefix'? ? ? => 'think_',

? ? ];

在控制器中實(shí)例該model對象

并dump(對象) 查詢所有的內(nèi)容

基本使用

$db::query()或者$db::execute()

改?

update 表名 set 數(shù)據(jù)更改=“”

Db::execute('insert into think_user (id,name,values(?, ?)',[8,'thinkphp']);

Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);

Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);

------------------------------------------------

TP數(shù)據(jù)庫處理

查詢操作

1/用table方法查詢

Db::table(表名)->select()查找全部

Db::table(表明)->find()查詢第一條

注意table不會(huì)添加表前輟

2/name方法查詢

把table換成name即可

注意name會(huì)自動(dòng)添加配置文件的表前綴

3/助手函數(shù)查詢

db()函數(shù)

db(表明)->select()

進(jìn)行條件匹配

Db::table()->where(id,>,25)->where(id,<,28)->select()

Db::table()->where("id>25 and id<28")->select()

Db::table()->where(['id'=>[">",25])->where(["id"=>["<",28q]])->select()

查詢id大于25小于28的所有數(shù)據(jù)

模糊查詢

Db::table()->where(name,like,%qwe%)->select()

查詢name類似qwe的數(shù)據(jù)

或者匹配

Db::table()->where(id,>=,9)->whereOr(id,<,0)->select()

查詢id小于0或者id大于等于9的數(shù)據(jù)

截取數(shù)據(jù)

Limit(2) 截取2個(gè)數(shù)據(jù)

limit(2,2)從2開始截取 截取2個(gè)數(shù)據(jù)

排序order

默認(rèn)正序? desc倒序

order(id,desc)

*查詢字段

field('name压汪,pass')->select()? field(['name','pass'])->select()

查詢所有數(shù)據(jù)中的name和pass字段

field('name uname,pass')->select 給name取別名為uname

field("count(*) as tot")->select

field(["count(*)" => "tot"])->select

得到結(jié)果是tot=>該數(shù)據(jù)的總和

field('name粪牲,pass',true)->select()? field(['name','pass',true])->select()

不查詢name,pass

分頁截取

page(1,5) 第一頁從第一條展示到第五條

page(4,5) 第4頁? 從第15展示(5條)到20條

分組聚合

Db::table()->field("pass,count(*) tot")->group(pass)->select

查詢各個(gè)密碼的人數(shù) 比如設(shè)置123的有幾個(gè)

對分組聚合的結(jié)果過濾

Db::table()->field("pass,count(*) tot")->having("tot >=2")->group(pass)->select? 查詢各個(gè)密碼的人數(shù) 人數(shù)大于2的才被查詢

別名

alias

Db::table(123)->alias(1)

關(guān)聯(lián)join

Db::table(表1)->filed(表1*,表2.type)->join(表2,"表一和表二關(guān)系")->select()

查找出滿足該關(guān)系式的所有數(shù)據(jù)? 且顯示出表1的所有數(shù)據(jù)和表2的type數(shù)據(jù)

還有左聯(lián)和右聯(lián) 就是以誰為主

合并集合union

Db::table(1)->union(select語句)->select()

合并1和select的所有結(jié)果

綁定bind

防止sql注入

一般不要使用原生的sql語句

tp語句一般都是防止注入的

--------------------------------------------

$data=[

.......

書寫數(shù)據(jù) 一條就一維數(shù)據(jù) 多條就2維數(shù)據(jù)

]

Db::table()->where()->insert() 增加一條數(shù)據(jù)

Db::table()->where()->insertAll() 增加多條數(shù)據(jù)

Db::table()->where()->inserGetId() 增加數(shù)據(jù)并且取得id

db()->insert()? db()->insertAll? db()->inserGetId()

更新

更新一條數(shù)據(jù)

Db::table()->where("id",10)->update(["age"=>10])

Db::table()->update(["age"=>10,"id"=>10])

Db::table()->where("id",10)->setField("age",10)

更新多條數(shù)據(jù)

Db::table()->where("id",10)->update(["age"=>10,"name"=>"oo"])

自增自減

Db::table()->where("id",10)->setInc("age")? 自增 每次執(zhí)行age++

Db::table->where("id",10)->setDec("age") 自減 每次執(zhí)行age--

可以設(shè)置增減幅度? setInc("age",3)? 每次增加3

刪除

刪除一條數(shù)據(jù)

Db::table()->where("id",10)->delete();

Db::table()->delete(10)

刪除多條數(shù)據(jù)

Db::table()->where("id in(1,2,3)")->delete()

Db::table()->where("id>=1 and id<=3")->delete()

---------------------------------------------------

事務(wù)機(jī)制

自動(dòng)事務(wù)機(jī)制

Db::transaction(function(){


});

如果里面有錯(cuò)誤沒有執(zhí)行 那么會(huì)停止執(zhí)行

*自動(dòng)事務(wù)機(jī)制

Db::startTrans(); 開啟事務(wù)機(jī)制

try{

? ? $a=Db::table('think_user')->find(1);

? ? if($a){

throw new \Exception("異常信息");

} 判斷是否成功 錯(cuò)誤就拋出異常

? ? $b=Db::table('think_user')->delete(1);

? ? if($a){

throw new \Exception("異常信息");

}

? ? // 提交事務(wù)

? ? Db::commit();? ?

} catch (\Exception $e) {? ? 捕捉異常

? ? // 回滾事務(wù)

? ? Db::rollback();

dump($e->getMessege) 可以獲取異常信息

}

Db::startTrans();? 開啟事務(wù)

$a=Db::table(a)->delete();

$b=Db::table(b)->delete();

if($a && $b){

? Db::commit();

}else{

Db::rollback();

}


系統(tǒng)類

config? 修改和讀取配置

Env 環(huán)境變量獲取修改

controller? 系統(tǒng)控制器

view? 展示

route? 路由

Url 生成地址

系統(tǒng)方法

controller 實(shí)例化控制器

action 調(diào)用模塊的操作方法

config 設(shè)置和獲取配置

dump 瀏覽器友好的變量輸出

view 展現(xiàn)html畫面

url 生成url地址


跳轉(zhuǎn)

分為兩種

成功跳轉(zhuǎn)? 失敗調(diào)整

success(提示信息止剖,跳轉(zhuǎn)頁面腺阳,用戶自定義數(shù)據(jù),跳轉(zhuǎn)時(shí)間穿香,header信息)

error參數(shù)一樣

修改跳轉(zhuǎn)頁面(模板頁面)

1/

tp5/thinkphp/tp1/dispatch_jump.tpl

模板頁面數(shù)據(jù)

$data 要返回的數(shù)據(jù)? 用戶自定義的數(shù)據(jù)

$msg 頁面提示信息

$code 返回的code? 成功1 失敗0

$wait 跳轉(zhuǎn)等待時(shí)間 單位為秒

$url 跳轉(zhuǎn)頁面地址

2/用戶自定義模板頁面

修改配置文件config中的跳轉(zhuǎn)

在tp5/thinkphp/tp1中創(chuàng)建success.tp1 error.tp1

重定向

系統(tǒng)方法? redirect(跳轉(zhuǎn)地址亭引,其他參數(shù),code編碼皮获,隱式參數(shù))

空操作

_empty 在地址欄后隨意添加

空方法

方法可以不存在

空控制器

Error控制器? 控制器可不存在

使用命令行

1/命令行cmd

2/切換到tp5

3/輸入php think

可以生成控制器或者清除臨時(shí)文件等等

生成的資源控制器

和資源路由一一對應(yīng)? 配合資源路由一起使用

GET blog index

GET blog/create create

POST blog save

GET blog/:id read

GET blog/:id/edit edit

PUT blog/:id update

DELETE blog/:id delete


雜項(xiàng)

1/緩存減少數(shù)據(jù)庫壓力設(shè)置緩存繼承Cache 并用Cache::set(名焙蚓,值,時(shí)間)助手函數(shù) cache(名字,值购公,時(shí)間)讀取緩存Cache::get(名) 或者 cache(名)清空緩存Cache::clear()2/Session設(shè)置Session繼承Session Session::set(名萌京,值)助手函數(shù)session(名,值)獲取session繼承后 Session::get(名宏浩,值)助手函數(shù)session(名)判斷是否設(shè)置Session::has(名) 或者 session(?名)刪除sessionSession::delete(名) 或者 session(名知残,null)清空sessionSession::clear(名) 或者 session(null)3/cookie設(shè)置cookie繼承Cookie類 Cookie::set(名,值比庄,時(shí)間)助手函數(shù) cookie(名求妹,值,時(shí)間)獲取cookie繼承后 Cookie::get(名) 或者cookie(名)判斷cookieCookie::has(名) 或者 cookie(?名)刪除cookieCookie::delete(名) 或者 cookie(名佳窑,null)清空cookieCookie::clear() 或者 cookie(null)4/分頁在數(shù)據(jù)庫讀取數(shù)據(jù)時(shí)使用Db::table->paginate(數(shù)據(jù)條數(shù))在Html頁面中{$list->render()} 就可以得到導(dǎo)航欄頁數(shù)5/文件上傳獲取數(shù)據(jù)$file=$request->file(名)移動(dòng)文件$file->move(url)6/驗(yàn)證驗(yàn)證碼的獲取 {:captcha_img()} 或者

手動(dòng)驗(yàn)證 if(!captcha_check($captcha)){ //驗(yàn)證失敗};應(yīng)用配置在config中 添加一個(gè)captcha進(jìn)行配置7/圖片處理獲取圖片? 繼承Image$img=Image::open(ur;)獲取圖片信息$image->width.....圖片的裁剪$image->crop(裁剪的大小制恍,裁剪的位置【默認(rèn)是從頂點(diǎn)裁剪】)->save(裁剪后保存)crop(100,100,200,200) 裁剪一個(gè)100*100的圖片 從x200-y200的位置開始裁剪圖片縮放$image->thumb(縮放大小)->save(保存地址)? 默認(rèn)等比例變化thumb第三個(gè)參數(shù)是縮放類型圖片的翻轉(zhuǎn)$image->flip()->save()圖片旋轉(zhuǎn)$image->rotate(旋轉(zhuǎn)的角度)->save()圖片的水印圖片水印$image->water("圖片地址",水印位置類型神凑,透明度)->save()$image->water("文字"净神,字體文件,像素大小耙厚,顏色强挫,透明度)->save()



專有名詞和方法

www.top.com 域名

index.php入口文件

Index前臺(tái)

uer控制器名

index類名

test方法

命名空間與目錄有關(guān)

www/tp5/application/index/controller

namesapce app/index/controller

同名的時(shí)候取別名 as name

use引用命名空間

---------------------------------

創(chuàng)建一個(gè)控制器或者模塊 :

在app/index/controller中創(chuàng)建

1/控制器的文件名首字母大寫

2/控制器必須聲明命名空間

3/控制器中類名必須和文件名一致

調(diào)用當(dāng)前模塊的控制器(跨控制器調(diào)用)

1/使用命名空間調(diào)用(面向?qū)ο螅?/p>

3/使用use url? ? $model=new User

2/系統(tǒng)方法controller('模塊/控制器')

調(diào)用當(dāng)前控制器的方法(跨方法調(diào)用)

1/面向?qū)ο? self::? this->

2/系統(tǒng)方法? action()

調(diào)用其它控制器方法

1/面向?qū)ο?先加載其他頁面實(shí)例對象再調(diào)用

2/action(該文件方法)

調(diào)用后臺(tái)模塊方法

1/面向?qū)ο?/p>

2/action(url)

-----------------------

TP的流程:

入口文件index.php

1/定義目錄常量

2/加載框架的引導(dǎo)目錄

加載框架引導(dǎo)目錄thinkphp\start.php

1/引導(dǎo)基礎(chǔ)文件

加載框架的基礎(chǔ)引導(dǎo)文件 ThinkPhp/base

1/加載了系統(tǒng)常量

2/引入了一個(gè)loder類 是一個(gè)自動(dòng)加載類

3/引入環(huán)境變量

4/注冊自動(dòng)加載和異常處理機(jī)制

5/加載慣例配置

運(yùn)行應(yīng)用 think/app.php下的run方法

1/加載了當(dāng)前控制器中的initCommon方法

2/加載當(dāng)前控制器中的 init方法(加載各種配置文件,公共文件)

3/設(shè)置時(shí)區(qū)

4/加載當(dāng)前控制器中的routeCheck 路由檢測

5/調(diào)用控制器中的exec方法(根據(jù)用戶的請求進(jìn)行分發(fā)處理)

6/根據(jù)不同的請求類型加載對應(yīng)的文件

響應(yīng)輸出 :用戶界面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薛躬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呆细,老刑警劉巖型宝,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異絮爷,居然都是意外死亡趴酣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門坑夯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岖寞,“玉大人,你說我怎么就攤上這事柜蜈≌套唬” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵淑履,是天一觀的道長隶垮。 經(jīng)常有香客問我,道長秘噪,這世上最難降的妖魔是什么狸吞? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上蹋偏,老公的妹妹穿的比我還像新娘便斥。我一直安慰自己,他們只是感情好威始,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布枢纠。 她就那樣靜靜地躺著,像睡著了一般字逗。 火紅的嫁衣襯著肌膚如雪京郑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天葫掉,我揣著相機(jī)與錄音些举,去河邊找鬼。 笑死俭厚,一個(gè)胖子當(dāng)著我的面吹牛户魏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挪挤,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼叼丑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扛门?” 一聲冷哼從身側(cè)響起鸠信,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎论寨,沒想到半個(gè)月后星立,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葬凳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年绰垂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火焰。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劲装,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昌简,到底是詐尸還是另有隱情占业,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布江场,位于F島的核電站纺酸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏址否。R本人自食惡果不足惜餐蔬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一碎紊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧樊诺,春花似錦仗考、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顿膨,卻和暖如春锅锨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恋沃。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工必搞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人囊咏。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓恕洲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梅割。 傳聞我的和親對象是個(gè)殘疾皇子霜第,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,906評論 2 89
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)户辞,斷路器泌类,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 我老在琢磨人啊,我是一路走到今天的底燎,沒有人能給我一個(gè)更大的指導(dǎo)末誓,在我成長的過程中沒有人給我指點(diǎn),也無法指點(diǎn)书蚪,對于小...
    玩哲閱讀 5,151評論 4 70
  • 國足拜主席, 保佑此盤棋迅栅。 大寶凌波甩殊校, 小珠進(jìn)網(wǎng)馳。 韓流無可懼读存, 彩票不能迷为流。 當(dāng)眾辱國足, 沉昏本性失让簿。
    李緩之閱讀 338評論 1 18
  • 文/Nico -01- 每個(gè)人都渴望遇見命里的伯樂蹂安,就像渺小又黯淡的星光點(diǎn)亮了整片夜空,就像酸澀干枯的陳釀?dòng)龅搅似?..
    Nico尼可閱讀 616評論 6 13