您现在的位置是:网站首页>>PHP>>Yii

Yii 动作

发布时间:2019-12-25 16:22:09作者:wangjian浏览量:423点赞量:0

    一:动作:

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

    如下:

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

    二:独立动作

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

    如:

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

    如上,actions方法就创建了一个error动作,这里我使用的是我自己创建的独立动作类,自己创建的独立动作类需要继承yii\base\Action 或它的子类,并实现公有的名称为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,
                ]);
            }
        }
    }


上一篇:Yii 事件和行为

下一篇:Yii 请求与响应

0 +1