类名使用UpperCamelCase风格, XxxController
,Controller结尾,文件名和类名保持一致,继承BaseController
。
方法actionXxx
,action开头,参数固定为$args
接收请求数据(等效于$REQUEST)。
示例:
// file: FooController.php
class FooController extends BaseController {
public function actionBar($args) {
// code
}
}
重写$loginActions
或者$ajaxLoginActions
配置,区别在于校验失败返回数据格式不一样。
校验方法为User::checkLogin()
项目各自实现。
示例:
protected $loginActions = [
'foo', //不带action前缀
];
protected $ajaxLoginAction = [
'bar',
];
任何需要接受参数的方法都应该使用Param
进行参数校验过滤,常用校验方法有Param::checkParam
和Param:checkParam2
区别在于Param::checkParam2
会删除没定义校验规则的参数。
实例:
public function actionFoo($args) {
$rules = [
'id' => ['int', 'desc' => '用户id'],
];
Param::checkParam($rules, $args);
}
// input: id=123&name=solu
// output: $args = ['id' => 123, 'name' => 'solu'];
public function actionBar($args) {
$rules = [
'id' => ['int', 'desc' => '用户id'],
];
Param::checkParam2($rules, $args);
}
// input: id=123&name=solu
// output: $args = ['id' => 123];
接口文档是通过反射解析方法注释
和$rules
参数校验规则自动生成,所以要求每个对外接口都要有相应注释。如果不想接口出现在文档可以添加@ignore
注释。
示例:
/**
* 测试接口
* @author solu
*/
public function actionFoo($args) {
$rules = [
'id' => ['int', 'desc' => '用户id'],
];
Param::checkParam2($rules, $args);
}
浏览测试环境
//HOST/CONTROLLER/ACTION?doc=class 可预览文档。