Yii 動做

一:動做: php

控制器是由動做組成,他是執行終端用戶請求的最基礎的單元,一個控制器能夠有一個或者多個動做,動做一般我喜歡叫作操做或方法web

以下:網絡

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和viewapp

通常的動做建立十分簡單,動做必須是以actiion開頭的公有方法,動做的返回值會做爲響應數據發送給終端用戶,這種方式咱們稱爲內聯動做,內聯操做是最經常使用的動做建立方法,十分的簡單,這裏我就不過多的敘述了,可是若是你計劃在不一樣地方重用相同的動做, 或者你想從新分配一個動做,須要考慮定義它爲獨立動做frontend

二:獨立動做yii

獨立操做經過繼承yiibaseAction或它的子類來定義,要使用獨立操做,須要經過控制器中覆蓋yiibaseController::actions()方法來實現post

如:this

/**  
 * {@inheritdoc}  
 */  
public function actions()  
{  
    return [
        //申明一個error動做  
        'error' => [  
            //error動做使用的動做類,這裏若是你想用Yii的默認error動做類,class參數可設置爲yii\web\ErrorAction  
            'class' => 'frontend\actions\ErrorAction',  
        ],  
    ];  
}

如上,actions方法就建立了一個error動做,這裏我使用的是我本身建立的獨立動做類,本身建立的獨立動做類須要繼承yiibaseAction 或它的子類,並實現公有的名稱爲run()的方法,run()方法的實現方式和內斂動做方式差很少spa

以下爲簡單的獨立動做類code

<?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,  
            ]);  
        }  
    }  
}
相關文章
相關標籤/搜索