一:動做: 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, ]); } } }