1,框架目錄介紹
Application:用於存放網站的文件夾
Public:存放網站的靜態資源文件夾和各公共文件
Thinkphp:框架的核心代碼文件
Vendor:框架依賴的功能包存放文件夾
2,命令的方式創建控制器
根目錄:Php think make:controller 分組/控制器名稱
3,命令方式創建分組
根目錄:php think build
4,注冊路由
Route::rule(名稱,路由,方式GET/POST)
Route::get(名稱,路由)
Route::post(名稱,路由)
Route::any(名稱,路由,[‘method’=>’get|post’])
5,視圖的調用
$this->fetch()
1,數據庫的配置
(配置文件的地址:application/database.php)
2,命令的方式創建模型:
根目錄:Php think make:model 分組/模型名稱
3,數據的基本操作
1)添加:
添加一條記錄:save
添加多條記錄:saveAll
只添加數據庫中含有的字段:allowFiled(true)
如:$goods->allowField(true)->save($data)
$goods->saveall($data)
2)查詢:
A)查詢一條記錄:get()/find()
如:
Goods::get(133)
$goods->where(條件)
->find()
B)查詢多條記錄:all()/select()
如:
Goods::all([133,224])
$goods -> where('goods_id','in',[133,224])
->select()
C) 查詢字段:value()/column()
如:
查詢一個字段:
Goods::where('goods_id',133)
->value('goods_name')
查詢滿足條件的全部數據的指定字段:
Goods::where('goods_id','>',100)
->column('goods_name','goods_number')
3)修改:
update(至少滿足下面條件中的一個)
①設置一個where()方法
②給修改的數據里邊有設置主鍵id值
如:
$goods -> where('goods_name',’like’, ‘xiao%’)
-> update(['goods_name' => 'thinkphp']);
4)刪除:
a) 物理刪除:delete()/destroy(主鍵id)
b) 邏輯刪除:softDelete:只是更新了delete_time的值
- Trait:trait其實是解決php面向對象不能多繼承問題的,是一個彌補
4,連貫操作
1)where的四種使用方式:
① 數組
where(['name'=>'think','status'=>'1'])
where name=think and status=1
② 表達式
where('id','>',1)
where('mail','like','%think@163.com')
where(['id'=>['>',1],'mail'=>['like','%think@163.com']])
where id>1 and mail like ‘%think@163.com’
③ 字符串
where('type=1 AND status=1')
④ 綁定參數
where('id>:id AND name LIKE :name ',
['id'=>0, 'name'=>'thinkphp%'])
whereOr()或條件查詢
where('字段名','表達式','查詢條件');
whereOr('字段名','表達式','查詢條件');
例子:
$goods = new Goods();
$info = $goods -> where(‘goods_id’,’>’,100)
-> whereOr(‘goods_id’,’<’,50)
-> select();
2) field()限制被查詢的字段
field('id,title,content') 普通字段
field(['id','title','content']) 數組方式
field('id,SUM(score)') 使用函數
例子:
Goods::field(‘goods_id,goods_name’)->select()
3) limit()限制條數
limit(3)
limit('3,10') //通過偏移量進行條數限制,第4到14條
limit(3,10)
Goods::field(‘goods_id’)->limit(3,5)->select()
4) order()排序
order('id desc')
order('id asc')
order('id desc,status')
Goods::order(‘id desc,status’)->select()
5) group()分組查詢
Goods::field('goods_id,max(price)')
-> group('goods_brand')
-> select();
6) having()查詢
Goods::field('goods_id,count(goods_id) cnt')
->group('goods_brand')
->having('cnt>200')
->select();
7) fetchSql(true/false) 直接獲取sql語句不執行操作
true:獲取sql語句
false:執行sql語句
curd(增、刪、改、查)操作語句都可以獲取對應的sql語句
Goods::field('mg_name,mg_pwd')->fetchSql(true)->select()
$m->fetchSql(true)->update(['mg_id'=>508,'mg_name'=>'think']);
Manager::fetchSql(true)->destroy(509);
$manager->fetchSql(true)->saveAll($data);
$manager->fetchSql(true)->save($data);
8) alias()給數據表起別名,有兩種方式使用
① alias('m') 給當前數據表起別名
② alias(['sp_role __ROLE__'=>'r','__MANAGER__'=>'m']);
表名要設置為大寫的,並且前后有兩個”_下划線”
__ROLE__會關聯sp_role表,假定sp_是表前綴
__MANAGER__會關聯sp_manager表
又比如__USER_TYPE__會關聯sp_user_type表
Manager::alias('m')
->join('__ROLE__ r','m.role_id=r.role_id')
->field('m.mg_name,r.role_name')
->select();
Manager::alias(['__ROLE__'=>'r','__MANAGER__'=>'m'])
->join('__ROLE__','m.role_id=r.role_id')
->field('m.mg_name,r.role_name')
->select();
9) join() 連表查詢
join(表名 別名,連表條件,類型)
類型:INNER,LEFT,RIGHT,FULL(mysql不支持)
select g.*,b.brand_name
from sp_goods as g
join sp_brand as b
on g.brand_id=b.brand_id
1,模板的使用
1)給模板傳遞數據:
1)方式
$this -> assign(變量在模版中的使用名稱,被傳遞的數據);(和smartymuban的應用相似)
2)方式
return $this -> fetch(‘模版名稱’,數組信息);
return $this -> fetch(‘模版名稱’,[‘info’=>$info,’name’=>’jim’]);
如果模版名稱為空,需要有“占位符”,具體如下
return $this -> fetch(‘’,[‘info’=>$info,’name’=>’jim’]);
3)方式
$info = xxx;
$name = yyy;
return $this -> fetch(‘’,compact(‘info’,’name’));
compact使用()
建立一個數組,包括變量名和它們的值
$city = “北京”;
$people = “2000萬”;
$weather = “sunshine”;
$arr = compact(‘city’,’people’,’weather’);
print_r($arr);
//[‘city’=>’北京’,’people’=>’2000萬’,’weather’=>’sunshine’]
2)數據的輸出
1)普通變量:{$name}
2)數組:{$arr.name} {$arr[‘name’]}
3)對象:{$obj.name} {$obj:name} {$obj->name}
2,遍歷數據
① {foreach $info as $val}
② {volist name="info" id="val"}
volist標簽里邊還可以支持的屬性:
offset :偏移量,從第n條開始顯示(條數基數從0開始),需要通過””雙引號定義信息
length: 一共顯示多少條
key:顯示數據序號
empty:數據為空時的提示信息
mod:取模,當前記錄的序號對mod取模后的信息,需要通過””雙引號定義信息
3,收集數據
request()->param():收集所有類型的數據
request()->post():收集post方式提交的信息
Svae():添加數據
allowField(true):去除數據庫不存在的數據
4,ajax無刷新方式
evt.preventDefault():阻止當前對象的默認動作
$(this).serialize():序列化當前表單的對象
parent.window.location.href=parent.window.location.href:刷新父界面
layer_close():關閉layer彈窗
5,制作超鏈接
{:url('分組/控制器/操作方法',[參數=>值,參數=>值])}
6,Request對象的使用
1,創建對象
request()
Request::instance()
function 方法(Request $request)
$this->request
2,收集數據
request()->get()
request()->post()
request()->param()
3,判斷請求類型
request()->isAjax()
request()->isGet()
request()->isPost()
4,獲得系統升級
request()->session
request()->action()
request()->controller()
request()->module()
1,依賴注入
class Goods extends Model
{
//在模型中聲明invoke方法及對應內容
public static function invoke(Request $request)
{
$id = $request->param('goods_id');
return self::get($id);
}
}
控制器方法中,設置上述模型的對象,就會自動綁定上數據模型
public function upd(Goods $goods)
2,命名空間
命名空間的作用范圍:
① 一個文件中只有一個namespace,這個空間的作用范圍就是從namespace開始到文件的結束
② 一個文件中有多個namespace,每個空間的作用范圍是從自己的namespace開始下遇到下個namespace到來之前
③ 文件彼此包含include,被包含文件的命名空間 對 包含文件不造成任何 命名空間作用范圍的影響
空間元素的三種訪問方式
① 完全限定名稱
② 限定名稱
③ 非限定名稱
空間引入
use 空間\空間\空間\空間;
use 空間\空間\空間\類名;
use 空間\空間\空間\元素 as 別名;
訪問公共空間的元素統一設置為: \元素
建議:訪問公共空間元素都要通過”\元素”的方式進行,好處代碼可讀性高
注意:
文件的第1個namespace關鍵字前邊不能有任何非注釋代碼
ü 通過“非限定名稱”方式訪問一個函數或常量元素首先會在本身空間獲得,如果沒有再去公共空間獲取
ü 通過“非限定名稱”訪問訪問一個類元素 ,則本身空間必須存在該類,否則報錯