一:动作:
控制器是由动作组成,他是执行终端用户请求的最基础的单元,一个控制器可以有一个或者多个动作,动作通常我喜欢叫做操作或方法
如下:
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,
]);
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。