控制器继承自yiiaseController类的对象,负责处理请求和生成响应,接收数据并传送到模型,传送模型结果到视图。
1. 操作
控制器由若干操作组成,是执行终端用户请求的最小单元。操作view,定义方法名为actionView()。
2. 路由
终端用户通过路由寻找到操作,路由是有包含控制器ID,操作ID。
3. 创建控制器
控制器 ID 应仅包含英文小写字母、数字、下划线、中横杠和正斜杠
控制器 Id 可包含子目录前缀,例如 admin/article 代表
控制器方法命名对大小写敏感。只有公有的方法才能被内联操作解析,
在不同地方重用相同的操作, 或者你想重新分配一个操作,需要考虑定义它为独立操作
独立操作
独立操作通过继承[[yiiaseAction]]或它的子类来定义,并实现公有的名称为 run()的方法
要使用独立操作,需要通过控制器中覆盖yiiaseController::actions()
public function actions() { return [ // 用类来申明"error" 操作 'error' => 'yiiwebErrorAction', // 用配置数组申明 "view" 操作 'view' => [ 'class' => 'yiiwebViewAction', 'viewPrefix' => '', ], ]; }
操作参数
内联操作的操作方法和独立操作的 run() 方法可以带参数,称为操作参数。 参数值从请求中获取
public function actionView($id, $version = null)
http://hostname/index.php?r=post/view&id=123: $id 会填入'123',$version 仍为 null 空
因为没有 version 请求参数;
•http://hostname/index.php?r=post/view&id=123&version=2: $id 和 $version 分别填
入 '123' 和 '2'`
•http://hostname/index.php?r=post/view: 会抛出[[yiiwebBadRequestHttpException]] 异
常 因为请求没有提供参数给必须赋值参数$id
•http://hostname/index.php?r=post/view&id[]=123: 会抛出
[[yiiwebBadRequestHttpException]] 异常 因为$id 参数收到数字值 ['123']而不是字符串.
如果想让操作参数接收数组值,需要指定$id 为 array,如下所示:
public function actionView(array $id, $version = null)
默认操作
在控制器中覆盖定义
public $defaultAction = 'home';