控制器
新建控制器的定義
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)輸出 :用戶界面