一:动作:

控制器是由动作组成,他是执行终端用户请求的最基础的单元,一个控制器可以有一个或者多个动作,动作通常我喜欢叫做操作或方法

如下:

namespace app\controllers;  
use Yii;  
use yii\web\\Controller;  
class PostController extends Controller  
{  
 public function actionIndex()  
 {  
  return $this->render('index');  
 }  
 public function actionView($id)  
 {  
    return $this->render('view', [  
      'id' => $id,  
    ]);  
  }  
}

就是post控制器包含了两个动作,分别为index和view

一般的动作创建十分简单,动作必须是以actiion开头的公有方法,动作的返回值会作为响应数据发送给终端用户,这种方式我们称为内联动作,内联操作是最常用的动作创建方法,十分的简单,这里我就不过多的叙述了,但是如果你计划在不同地方重用相同的动作, 或者你想重新分配一个动作,需要考虑定义它为独立动作

二:独立动作

独立操作通过继承yiibaseAction或它的子类来定义,要使用独立操作,需要通过控制器中覆盖yiibaseController::actions()方法来实现

如:

/**  
 * {@inheritdoc}  
 */  
public function actions()  
{  
    return [
        //申明一个error动作  
        'error' => [  
            //error动作使用的动作类,这里如果你想用Yii的默认error动作类,class参数可设置为yii\web\ErrorAction  
            'class' => 'frontend\actions\ErrorAction',  
        ],  
    ];  
} 

如上,actions方法就创建了一个error动作,这里我使用的是我自己创建的独立动作类,自己创建的独立动作类需要继承yiibaseAction 或它的子类,并实现公有的名称为run()的方法,run()方法的实现方式和内敛动作方式差不多

如下为简单的独立动作类

<?php  
namespace frontend\actions;  
use yii\base\Action;  
class ViewAction extends Action  
{  
    public function run()  
    {  
        return '独立动作类';  
    }  
}  

根据上面我创建了一个error的独立动作类:

<?php  
namespace frontend\actions;  
use Yii;  
use yii\base\Action;  
use yii\base\Exception;  
use yii\base\UserException;  
use yii\web\HttpException;  
/**  
 * 错误信息动作类  
 * Class ErrorAction  
 * @package frontend\\actions  
 */  
class ErrorAction extends Action  
{  
    /**  
     *  
     * 默认试图  
     */  
    public $view = '@frontend/views/error.php';  
    /**  
     * 默认错误名称  
     */  
    public $defaultName;  
    /**  
     * 默认错误消息  
     */  
    public $defaultMessage = '当前网络连接不稳定,请重试!';  
    /**  
     * Runs the action  
     *  
     * @return string result content  
     */  
    public function run()  
    {  
        if (($exception = Yii::$app->getErrorHandler()->exception) === null) {  
            return '';  
        }  
        if ($exception instanceof HttpException) {  
            $code = $exception->statusCode;  
        } else {  
            $code = $exception->getCode();  
        }  
        if ($exception instanceof Exception) {  
            $name = $exception->getName();  
        } else {  
            $name = $this->defaultName ?: Yii::t('yii', 'Error');  
        }  
        if ($exception instanceof UserException) {  
            $message = $exception->getMessage();  
        } else {  
            $message = empty($this->defaultMessage) ? Yii::t('yii', 'An internal server error occurred.') : $this->defaultMessage;  
        }  
        if (Yii::$app->getRequest()->getIsAjax()) {  
            return "$message";  
        } else {  
            return $this->controller->render($this->view, [  
                'name' => $name,  
                'code' => $code,  
                'message' => $message,  
                'exception' => $exception,  
            ]);  
        }  
    }  
}

huaweichenai
679 声望114 粉丝

引用和评论

0 条评论