php5框架,Thinkphp5.1框架

**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
";

}```

*****

跳转和重定向

```

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值