NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
[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,'文件名'); ~~~