**Thinkphp5.1**是國內頂級的php框架之一,初學入坑必備
## 通過composer安裝TP5框架
~~~
composer create-project topthink/think tp5
~~~
## URL解析
serverName/index.php/模塊/控制器/操作/參數
模塊在application文件夾下面 默認有index文件夾(模塊為index)
index模塊下面有:
控制器 controller 文件夾 默認是 Index.php (首字母必須大寫)
控制器里面有操作的方法 index()
```
public function index($id){
return $id;
}
```
方法里面帶參數 $id
參數可以帶默認值
```
public function hello($name='laowang'){
return "hello" . $name;
}
```
訪問URL必須帶上參數名:name/xiaobai就能打印,如果沒有默認則訪問
hello xiaobai
## 模塊設計
多模塊設計:
所有模塊命名空間以app作為根命名空間
```
application
module1
common.php 模塊函數文件
config 配置目錄(可選)
controller 控制器(必須)
model 模型(可選)
view 視圖(可選)
```
如果只有一個模塊時候,可以綁定這個模塊:
public/index.php追加方法:
綁定模塊、控制器 test/index
``Container::get('app')->bind('test')->run->send();
``
其他模塊就無法訪問
config目錄下的app.php
可以設置空模塊
'empty_module' => 'index'
*****
單模塊設計:
config目錄下的app.php設置
'app_multi_module' => false; //支持多模塊改為false
控制器+操作
在application下面可以不存在模塊文件夾,直接寫控制器 controller
環境變量Env
獲取環境變量:應用目錄
return Env::get('app_path');
*****
## 控制器說明:
### 1,控制器定義
類名和文件名大小寫保持一致,才用駝峰式命名,首字母大寫
繼承Controller基類,可以調用父類的方法,但不是必須的
假如命名有兩個字母組成,例如HelloWorld,訪問時候用_關聯訪問:hello_world
config目錄下的app.php配置文件可以關閉URL自動轉換:
'url_convert'=>false;
*****
改變根命名空間方法:由app改成其他名稱
Env全局配置
根目錄添加.env文件
app_namespace=application
*****
### 2,控制器渲染輸出
1,return ,相當于echo ,輸出的是字符串
2, 使用json輸出 ,json()函數
```
$data= array('a'=>1,'b'=>2,'c'=>3);
return json($data);
```
3,view 輸出模板
```
public function abc(){
return view();
}
```
要求在模塊里面創建view文件夾,
里面對應建立相關控制器文件夾 (例如test),
里面建立相關方法名稱(abc)的html文件 abc.html
config目錄下的app.php配置文件可以控制默認輸出類型:
'default_return_type' => 'html'; 默認是html(文本)
'default_ajax_return_type' => 'json';
一般來說,正常頁面都是html輸出,用于模板。AJAX默認為JSON
如果繼承了基類控制器,可以定義控制器初始化方法:initialize();
//初始化,必須執行的方法
protected function initialize(){
//只支持輸出(echo),不支持返回(return)
echo "init";
}
*****
## 控制器操作
前置操作:
繼承Controller類后可以設置一個$beforeActionList 屬性來創建前置方法:
//里面是寫方法名 except是指定不調用哪個方法; only 是指定調用哪幾個方法
```
protected $beforeActionList= [
'first',
'second'=>['except'=>'one'],
'third'=>['only'=>'one,two'],
];
protected function first(){
echo "first<br/>";
}
```
*****
跳轉和重定向
```
protected $flag =false;
public function index(){
if($this->flag){
//如果不指定URL ,則返回 $_SERVER['HTTP_REFEER']
this->success('注冊成功','../');
}else{
this->error("失敗");
}
}
```
跳轉默認模板文件
thinkphp/tpl/dispatch_jump.tpl
'dispatch_success_tmpl' => Env::get('think_path');
*****
空方法與空控制器(訪問不存在時不報錯)
默認空方法
```
public function _empty($name){
return "此方法不存在" .$name;
}
```
默認空控制器
在controoler 里創建Error.php
```
class Error{
public function index(Request $request){
return "此控制器不存在".$request->controller();
}
}
```
app.php配置文件修改默認空控制器
'empty_controller' => 'Error'
*****
##
## 數據庫操作
配置文件在config/database.php
```
use think/Db;
public function getNoModelData(){
//table需要加前綴 ; name不需要加前綴
//$data = Db::table('完整表名')->select();
$data = Db::name('表名')->select();
return json($data);
}
```
*****
定義Mopdel:
在模型里面新建 model 文件夾;并且創建與數據表名一致的php文件:User.php
```
namespace app\model;
use think\Model;
class user extends Model{
}
```
*****
在控制器里面使用
```
use app\index\model\User;
public function getModelData(){
$data= User::select();
return json($data);
}
```
*****
建議調試時候打開Trace
配置文件app.php
'app_trace' = true;
右下角調試圖標里面的SQL可以看到完整的sql語句
*****
### 查詢方法:
1. 查詢一條數據: Db::name('表名')->find() 【LIMIT 1】
2. 查看最后執行sql: Db::getLastSql();
3. 查詢條件: Db::name('表名')->where('id',10)->find();
5. 沒有查詢到值會返回null
6. 沒有查詢到數據時返回異常: Db::name('表名')->where('id',10)->findOrFail();
7. 沒有查詢到數據時返回空數組:
8. Db::name('表名')->where('id',10)->findOrEmpty();
10. 查詢多條數據: Db::name('表名')->select()
11. 沒有查詢到數據時返回異常:
12. Db::name('表名')->where('id',10)->selectOrFail();
14. 查詢指定字段單個值:Db::name('表名')->where('id',10)->value('username');
16. 查詢指定列多個:Db::name('表名')->column('username');
17. 指定id作為索引:Db::name('表名')->column('username','id');
-----------------------------------------------------
### 新增insert()
```
$data=[
"name"=>"wang",
"age"=>"32"
];
$flag = Db::name('表名')->insert($data);
if($flag) return "success";
//獲取新增的id
return Db::insertGetId();
```
### 批量新增 insertAll()
###
```
$dataall=[
[
"name"=>"wang",
"age"=>"32"
],
[
"name"=>"li",
"age"=>"27"
]
];
Db::name('表名')->insertAll($data);
```
*****
### 修改 update()
###
//批量修改
```
$data=[
"name"=>"laowang"
];
$update= Db::name('表名')->where('id',10)->update($data);
return $update;
```
增值 inc() 參數1:字段名;參數2,數量
Db::name('表名')->inc('字段名',1)->where('id',10)->update($data);
減值 dec()參數1:字段名;參數2,數量
Db::name('表名')->dec('字段名',1)->where('id',10)->update($data);
字段使用mysql函數 exp() 參數1:字段名;參數2,方法
Db::name('表名')->exp('email','UPPER(email)')->where('id',10)->update($data);
### raw() 方法修改更新:
```
$data = [
'name' => 'wang',
'email' => Db::raw('UPPER(email)'),
'price' => Db::raw('price - 3'),
'id' => 10
];
Db::name('表名')->update($data);
```
//修改單個字段 setField()
$update= Db::name('表名')->where('id',10)->setField('name','老王');
*****
### 刪除 delete()
//刪除單條
Db::name('表名')->delete(10);
//刪除多條
Db::name('表名')->delete([1,2,3,4]);
//根據條件刪除
Db::name('表名')->where('id',10)->delete();
//全部刪除
Db::name('表名')->delete(true);
*****
### 比較查詢
= 、<> 、 > 、 <
等于、不等于、大于、小于
Db::name('表名')->where('id','<>',10)->select();
###
### 區間查詢
like
Db::name('表名')->where('name','like','wang%')->select();
支持數組傳遞多個值:
Db::name('表名')->where('name','like',['wang%','li%'],'or')->select();
select * from 表名 where('name' like 'wang% or 'name' like 'li%')
*****
whereLike()
Db::name('表名')->whereLike('name','wang%')->select();
whereNoLike()
Db::name('表名')->whereNoLike('name','wang%')->select();
*****
between 區間段從多少到多少
Db::name('表名')->whereLike('id','between','19,25')->select();
Db::name('表名')->whereLike('id','between',[19,25])->select();
Db::name('表名')->wherebetween('id',[19,25])->select();
//區間段不在從多少到多少
Db::name('表名')->whereNotbetween('id',[19,25])->select();
*****
in 包含多少
Db::name('表名')->where('id','in','19,20,25'])->select();
Db::name('表名')->whereIn('id','19,20,25'])->select();
//不包含多少
Db::name('表名')->whereNotIn('id','in','19,20,25'])->select();
*****
null 查詢為null的數據 參數:字段名
Db::name('表名')->where('uid','null')->select();
Db::name('表名')->whereNull('uid')->select();
notnull 查詢不為null的數據 參數:字段名
Db::name('表名')->where('uid','not null')->select();
Db::name('表名')->whereNotNull('uid')->select();
*****
自定義字段后的SQL exp
Db::name('表名')->where('id','exp','In(1,2,3)')->select();
Db::name('表名')->whereExp('id','In(1,2,3)')->select();
*****
### 時間查詢
操作: >、<、 >=、 <=
Db::name('表名')->where('create_time','> time','2019-01-01')->select();
Db::name('表名')->whereTime('create_time','>','2019-01-01')->select();
*****
###
### 區間查詢
Db::name('表名')->where('create_time','between time',['2019-01-01','2019-10-30'])->select();
Db::name('表名')->whereBetween('create_time',['2019-01-01','2019-10-30'])->select();
//查詢可以當天 whereBetweenTime: 當天查詢:一個參數; 區間查詢: 兩個參數
Db::name('表名')->whereBetweenTime('create_time','2019-01-01','2019-10-30')->select();