Yii的action

54 篇文章 2 订阅

1.内联操作

内联操作就是定义在Controller中的,以action前缀,并且完成需要功能的操作。
内联操作通常是用来执行资源的特定操作,因此,操作ID通常为动词,如view, update等。
内联操作的名字是根据操作ID遵循如下规则衍生:

  1. 将每个单词的第一个字母转为大写;
  2. 去掉中横杠,-之后的字符改大写,类似github;
  3. 增加action前缀.
  4. index 转成 actionIndex, hello-world 转成 actionHelloWorld。

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

就是说路由中的控制器方法会自动的加上action变为actionIndex  对外的一般都是内联操作

2.独立操作

是一个完成独立功能的操作,一般是公共的重用的功能。
例如Yii发布的yii\web\ViewAction和yii\web\ErrorAction都是独立操作,会被别的控制器进行调用;

要使用独立操作,需要通过控制器中覆盖yii\base\Controller::actions()方法在action map中申明,如下例所示:

public function actions()
{
    return [
        // 用类来申明"error" 操作
        'error' => 'yii\web\ErrorAction',
        // 用配置数组申明 "view" 操作
        'view' => [
            'class' => 'yii\web\ViewAction',
            'viewPrefix' => '',
        ],
    ];
}

如上所示, actions() 方法返回键为操作ID,值为对应操作类名或数组configurations 的数组。 
和内联操作不同,独立操作ID可包含任意字符,只要在actions() 方法中申明。
为创建一个独立操作类,需要继承yii\base\Action 或它的子类,并实现公有的名称为run()的方法,
run() 方法的角色和操作方法类似,例如:

<?php
namespace app\components;

use yii\base\Action;

class HelloWorldAction extends Action
{
    public function run()
    {
        return "Hello World";
    }
}

3.操作参数

内联操作的操作方法和独立操作的 run() 方法可以带参数,称为操作参数。 
参数值从请求中获取,
对于yii\web\Application网页应用, 每个操作参数的值从$_GET中获得,参数名作为键; 
对于yii\console\Application控制台应用, 操作参数对应命令行参数。


如下例,操作view (内联操作) 申明了两个参数 $id 和 $version。

namespace app\controllers;

use yii\web\Controller;

class PostController extends Controller
{
    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)
{
    // ...
}
现在如果请求为 http://hostname/index.php?r=post/view&id[]=123, 参数 $id 会使用数组值['123'], 
如果请求为 http://hostname/index.php?r=post/view&id=123, 参数 $id 会获取相同数组值,因为无类型
的'123'会自动转成数组。

4.控制器生命周期

1执行控制器,按顺序调用应用主体、模块、控制器的 beforeAction() 
2再判断有没有指定访问操作ID,如果没有,则访问yii\base\Controller::defaultAction默认操作ID。
3如果访问指定了访问的操作ID,那首先去执行独立操作actions里定义的对应的操作ID
4最后按顺序调用控制器、模块、应用主体的 afterAction() 方法;每个 afterAction() 方法会触发一个
 afterAction 事件,在事件中你可以追加事件处理操作。
5返回操作结果给应用主体。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值