YII2 控制器简述

控制器继承自yii\base\Controller类的对象,负责处理请求和生成响应,接收数据并传送到模型,传送模型结果到视图。

1. 操作

控制器由若干操作组成,是执行终端用户请求的最小单元。操作view,定义方法名为actionView()。

2. 路由

终端用户通过路由寻找到操作,路由是有包含控制器ID,操作ID。

3. 创建控制器

控制器 ID 应仅包含英文小写字母、数字、下划线、中横杠和正斜杠

控制器 Id 可包含子目录前缀,例如 admin/article 代表

控制器方法命名对大小写敏感。只有公有的方法才能被内联操作解析,

在不同地方重用相同的操作, 或者你想重新分配一个操作,需要考虑定义它为独立操作

独立操作
独立操作通过继承[[yii\base\Action]]或它的子类来定义,并实现公有的名称为 run()的方法

要使用独立操作,需要通过控制器中覆盖yii\base\Controller::actions()

public function actions()
{
    return [
        // 用类来申明"error" 操作
        'error' => 'yii\web\ErrorAction',
        // 用配置数组申明 "view" 操作
        'view' => [
            'class' => 'yii\web\ViewAction',
            '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: 会抛出[[yii\web\BadRequestHttpException]] 异
常 因为请求没有提供参数给必须赋值参数$id

•http://hostname/index.php?r=post/view&id[]=123: 会抛出
[[yii\web\BadRequestHttpException]] 异常 因为$id 参数收到数字值 ['123']而不是字符串.

如果想让操作参数接收数组值,需要指定$id 为 array,如下所示:
public function actionView(array $id, $version = null)

默认操作

在控制器中覆盖定义

public $defaultAction = 'home';

posted @ 2016-03-22 15:34  sundong_wyz  阅读(431)  评论(0编辑  收藏  举报