php基础控制器类_控制器基础 · RapPHP完全开发手册 · 看云

[TOC]

RapPhp的的控制器无需继承任何类

### 控制器的位置

* * * * *

#### 1.第一种controller放最前面(优先)

>controller/xxx/xx/AbcController

#### 1.第二种controller目录放后面

> xxx/xxx/xx/controller/AbcController

>[info] 控制器必须以Controller结尾

### 控制器定义

* * * * *

一个比较典型的控制器如下

~~~

namespace app\index\controller;

class IndexController

{

public function index()

{

return ['aa'=>'test'];

}

}

~~~

控制器类文件的实际位置是

~~~

app\index\controller\IndexController.php

~~~

### 自动查找

控制器支持路径自动查找

~~~

路径

/a/b/user/save

会自动调用

app\controller\a\b\UserController->save 方法

或者

app\a\b\controller\UserController->save 方法

~~~

### mapping路由

#### 对应命名空间

* * * * *

支持路径和命名空间的对应

~~~

配置项

'mapping'=>[//mvc 的路径配置

"/io"=>"app\a\b",

]

路径

/io/user/save

对应

app\a\b\controller\UserController->save

~~~

#### 对应到控制器

* * * * *

~~~

配置

'mapping'=>[//mvc 的路径配置

"/io"=>UserController::class

],

路径

/io/save

对应

UserController->save

~~~

### 输入参数

#### 自动绑定

* * * * *

rapphp 的控制器的方法支持自动参数绑定

~~~

namespace app\index\controller;

class UserController

{

public function save($id,$name,$sex)

{

return ['success'=>true];

}

}

~~~

save方法里的 $id,$name,$sex可以自动由GET 参数获取或POST 参数获取,如果 PUT的是 json 也可以自动获取

#### search 参数

* * * * *

很多人喜欢这样的url `/index/12/3434/test/34`

这里路径上有三个是数字

路径查找等于 去掉数字后的路径 `/index/test`

三个参数可以通过下面方式获取

~~~

public function test(Request $request) {

$search = $request -> search();//获取到search 参数

$cat_id = $search[0];

$test_id = $search[1];

$id = $search[2];

return ['success'=>true];

}

~~~

当然也支持绑定

~~~

//Search的是按出现的顺序取值

public function test(Search $cat_id, Search $test_id, Search $id) {

$cat_id = $cat_id -> value();

$test_id = $test_id -> value();

$id = $id -> value();;

return ['success'=>true];

}

~~~

#### 绑定到模型

自动绑定的参数支持绑定到对象的对应属性上

* * * * *

~~~

namespace app\index\model;

class User extend extends Record

{

public $id;

public $name;

public $sex;

}

* * * * * * * * * * * * * * * * * * * * * * * * *

namespace app\index\controller;

class UserController

{

public function save(User $user)

{

$user->save();

return ['success'=>true];

}

}

~~~

这里绑定到的对象 是Record(模型)的子类;也可以绑定到任意模型上

#### 文件上传

* * * * *

通过File对象可以绑定上传的同名文件

~~~

namespace app\index\controller;

use rap\storage\File;

class FileController

{

public function upload(File $file)

{

return $file;

}

}

~~~

#### 多文件上传

~~~

public function thumbs(Request $request, $base = 'upload') {

$files = $request->files('file');

return ["success"=>true];

}

~~~

更多文件上传的内容需要查看Storage 模块的文档

### 输出结果

#### 输出 json

* * * * *

json 输出是最常见的,控制器默认会将所有非字符串类型的 全部已 json_encode 输出

~~~

class IndexController

{

public function save()

{

return ['success'=>true,msg=>'保存成功'];

}

}

~~~

输出的请求头是application/json

内容是

~~~

{'success':true,'msg':'保存成功'}

~~~

#### 输出纯文本

如果想在结构里输出纯文本 retutn body 方法

~~~

class IndexController

{

public function save()

{

return body('这里是你的文本内容')

}

}

~~~

#### 重定向

默认重定向的 http_response_code为302

~~~

return redirect('a',302); //同路径

return redirect('/a/a',302); //根路径

return redirect("http://baidu.com/other/page",302); //绝对路径

~~~

#### 文件下载

~~~

$file=ROOT_PATH.'test.zip';

retrun download($file,'文件名');

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值