Class yii\base\Controller

继承yii\base\Controller » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\base\ViewContextInterface
子类yii\console\Controller, yii\console\controllers\AssetController, yii\console\controllers\BaseMigrateController, yii\console\controllers\CacheController, yii\console\controllers\FixtureController, yii\console\controllers\HelpController, yii\console\controllers\MessageController, yii\console\controllers\MigrateController, yii\console\controllers\ServeController, yii\rest\ActiveController, yii\rest\Controller, yii\web\Controller
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/Controller.php

Controller 是包含控制器逻辑的类的基类.

有关 Controller 的更多详细信息和使用信息, 请参阅 权威指南 - 应用结构 - 控制器(Controllers).

公共属性

隐藏继承的属性

属性类型描述定义在
$action yii\base\Action|null 当前正在执行的动作. yii\base\Controller
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$defaultAction string 在请求中未指定动作ID时使用的动作ID. yii\base\Controller
$id string 该控制器的ID. yii\base\Controller
$layout null|string|false 要应用于此控制器的视图的布局的名称. yii\base\Controller
$module yii\base\Module 该控制器所属的模块. yii\base\Controller
$modules yii\base\Module[] 该控制器所在的所有祖先模块. 该属性是只读的. yii\base\Controller
$request yii\base\Request|array|string The request. yii\base\Controller
$response yii\base\Response|array|string The response. yii\base\Controller
$route string 当前请求的路由(模块ID, 控制器ID和动作ID). 该属性是只读的. yii\base\Controller
$uniqueId string 以模块ID(如果有)为前缀的控制器ID. 该属性是只读的. yii\base\Controller
$view yii\base\View|yii\web\View 可用于渲染视图或视图文件的视图对象. yii\base\Controller
$viewPath string 包含此控制器的视图文件的目录. yii\base\Controller

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__construct() 构造函数. yii\base\Controller
__get() 返回组件属性的值. yii\base\Component
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\Component
__set() 设置组件属性的值. yii\base\Component
__unset() 将组件属性设置为null. yii\base\Component
actions() 为控制器声明外部动作. yii\base\Controller
afterAction() 执行动作后立即调用该方法. yii\base\Controller
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
beforeAction() 在执行动作之前立即调用该方法. yii\base\Controller
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
bindActionParams() 将参数绑定到动作. yii\base\Controller
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\Component
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\Component
className() 返回此类的完全限定名称. yii\base\BaseObject
createAction() 根据给定的动作ID创建一个动作. yii\base\Controller
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
findLayoutFile() 查找适用的布局文件. yii\base\Controller
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
getModules() 返回此控制器的所有祖先模块. yii\base\Controller
getRoute() 返回当前请求的路由. yii\base\Controller
getUniqueId() 返回控制器的唯一ID. yii\base\Controller
getView() 返回可用于渲染视图或视图文件的视图对象. yii\base\Controller
getViewPath() 返回包含此控制器的视图文件的目录. yii\base\Controller
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化对象. yii\base\Controller
off() 从该组件分离现有的事件处理程序. yii\base\Component
on() 将事件处理程序附加到事件. yii\base\Component
render() 渲染视图并应用布局(如果可用). yii\base\Controller
renderContent() 通过应用布局渲染静态字符串. yii\base\Controller
renderFile() 渲染视图文件. yii\base\Controller
renderPartial() 渲染视图而不使用布局. yii\base\Controller
run() 运行根据路由指定的请求. yii\base\Controller
runAction() 使用指定的动作ID和参数在此控制器内运行一个动作. yii\base\Controller
setView() 设置此控制器使用的视图对象. yii\base\Controller
setViewPath() 设置包含视图文件的目录. yii\base\Controller
trigger() 触发事件. yii\base\Component

受保护的方法

隐藏继承的方法

方法描述定义在
bindInjectedParams() 根据操作方法签名中的类型和名称填充参数. yii\base\Controller

事件

隐藏继承的事件

事件类型描述定义在
EVENT_AFTER_ACTION yii\base\ActionEvent 执行控制器动作后立即触发的事件. yii\base\Controller
EVENT_BEFORE_ACTION yii\base\ActionEvent 在执行控制器动作之前触发的事件. yii\base\Controller

属性详情

$action public 属性

当前正在执行的动作. 当 yii\base\Application 调用该属性来运行一个动作时, 该属性将由 run() 设置.

$defaultAction public 属性

在请求中未指定动作ID时使用的动作ID. 默认为index.

public string $defaultAction 'index'
$id public 属性

该控制器的ID.

public string $id null
$layout public 属性

要应用于此控制器的视图的布局的名称. 该属性主要影响 render() 的行为. 默认为'null', 表示实际的布局值应该从 $module 的布局值继承. 如果为'false', 则不会应用任何布局.

public null|string|false $layout null
$module public 属性

该控制器所属的模块.

public yii\base\Module $module null
$modules public 属性

该控制器所在的所有祖先模块. 该属性是只读的.

public yii\base\Module[] $modules null
$request public 属性 (可用自版本: 2.0.36)

The request.

$response public 属性 (可用自版本: 2.0.36)

The response.

$route public 属性

当前请求的路由(模块ID, 控制器ID和动作ID). 该属性是只读的.

public string $route null
$uniqueId public 属性

以模块ID(如果有)为前缀的控制器ID. 该属性是只读的.

public string $uniqueId null
$view public 属性

可用于渲染视图或视图文件的视图对象.

$viewPath public 属性

包含此控制器的视图文件的目录.

public string $viewPath null

方法详情

__construct() public 方法

构造函数.

public void __construct ( $id, $module, $config = [] )
$id string

该控制器的ID.

$module yii\base\Module

该控制器所属的模块.

$config array

将用于初始化对象属性的 name-value 对.

actions() public 方法

为控制器声明外部动作.

该方法将被覆盖以声明控制器的外部动作. 它应该返回一个数组, 其中数组键是动作ID, 数组值是相应的动作类名称或动作配置数组. 例如:

return [
    'action1' => 'app\components\Action1',
    'action2' => [
        'class' => 'app\components\Action2',
        'property1' => 'value1',
        'property2' => 'value2',
    ],
];

稍后将使用 Yii::createObject() 使用此处提供的配置来创建请求的动作.

public array actions ( )
afterAction() public 方法

执行动作后立即调用该方法.

该方法将触发 EVENT_AFTER_ACTION 事件. 该方法的返回值将用作动作返回值.

如果重写这个方法, 则代码应如下所示:

public function afterAction($action, $result)
{
    $result = parent::afterAction($action, $result);
    // 你的自定义代码在这里
    return $result;
}
public mixed afterAction ( $action, $result )
$action yii\base\Action

刚刚执行的动作.

$result mixed

动作返回的结果

return mixed

处理后的动作结果.

beforeAction() public 方法

在执行动作之前立即调用该方法.

该方法将触发 EVENT_BEFORE_ACTION 事件. 该方法的返回值将决定动作是否应继续运行.

如果该动作不执行, 则应通过提供必要的输出或重定向请求, 在beforeAction代码内部处理该请求. 否则, 响应将为空.

如果重写该方法, 则代码应如下所示:

public function beforeAction($action)
{
    // 如果你希望代码在 [[EVENT_BEFORE_ACTION]] 事件触发的动作过滤器之前运行(eg. PageCache 或 AccessControl), 请在此处输入你的自定义代码.

    if (!parent::beforeAction($action)) {
        return false;
    }

    // 其他自定义代码

    return true; // 或者`false`表示不运行该动作
}
public boolean beforeAction ( $action )
$action yii\base\Action

要执行的动作.

return boolean

该动作是否应该继续运行.

bindActionParams() public 方法

将参数绑定到动作.

yii\base\Action 开始使用给定参数运行时, 将调用此方法.

public array bindActionParams ( $action, $params )
$action yii\base\Action

与参数绑定的动作.

$params array

要绑定到动作的参数.

return array

动作可以运行的有效参数.

bindInjectedParams() protected 方法 (可用自版本: 2.0.36)

根据操作方法签名中的类型和名称填充参数.

protected void bindInjectedParams ( \ReflectionType $type, $name, &$args, &$requestedParams )
$type \ReflectionType

动作参数的反射类型.

$name string

参数的名称.

$args
$requestedParams
throws yii\base\ErrorException

当我们无法加载所需的服务时.

throws yii\base\InvalidConfigException

DI 配置错误时抛出.

throws yii\di\NotInstantiableException

在容器中没有正确定义的情况下无法将定义解析为具体类(eg: 接口类型提示)时抛出.

createAction() public 方法

根据给定的动作ID创建一个动作.

该方法首先检查动作ID是否已经在 actions() 中声明. 如果已声明, 它将使用在那里声明的配置来创建动作对象. 否则, 它将查找一个名为actionXyz格式的控制器方法, 其中Xyz为动作ID. 如果找到, 将创建并返回该方法的 yii\base\InlineAction.

public yii\base\Action|null createAction ( $id )
$id string

动作ID.

return yii\base\Action|null

新创建的动作实例. 如果ID无法解析为任何动作, 则为null.

findLayoutFile() public 方法

查找适用的布局文件.

public string|boolean findLayoutFile ( $view )
$view yii\base\View

该视图对象用来渲染布局文件.

return string|boolean

布局文件路径, 如果不需要布局, 则返回false. 有关如何指定此参数, 请参阅 render().

throws yii\base\InvalidArgumentException

如果使用无效的路径别名来指定布局.

getModules() public 方法

返回此控制器的所有祖先模块.

数组中的第一个模块是最外面的模块(即应用程序实例), 而最后一个模块是最内层的模块.

public yii\base\Module[] getModules ( )
return yii\base\Module[]

该控制器所在的所有祖先模块.

getRoute() public 方法

返回当前请求的路由.

public string getRoute ( )
return string

当前请求的路由(模块ID, 控制器ID和动作ID).

getUniqueId() public 方法

返回控制器的唯一ID.

public string getUniqueId ( )
return string

以模块ID(如果有)为前缀的控制器ID.

getView() public 方法

返回可用于渲染视图或视图文件的视图对象.

render(), renderPartial()renderFile() 方法将使用此视图对象来实现实际的视图渲染. 如果未设置, 它将默认为"view"应用程序组件.

public yii\base\View|yii\web\View getView ( )
return yii\base\View|yii\web\View

可用于渲染视图或视图文件的视图对象.

getViewPath() public 方法

返回包含此控制器的视图文件的目录.

默认实现将返回 $module$viewPath 目录下名为 controller $id 的目录.

public string getViewPath ( )
return string

包含此控制器的视图文件的目录.

init() public 方法 (可用自版本: 2.0.36)

初始化对象.

在使用给定的配置初始化对象之后, 在构造函数的末尾调用此方法.

public void init ( )
render() public 方法

渲染视图并应用布局(如果可用).

可以使用以下格式之一指定要渲染的视图:

  • 路径别名 (eg. @app/views/site/index);
  • 应用程序内的绝对路径(eg. //site/index): 视图名称以双斜杠开始. 实际的视图文件将在应用程序的 view 路径 下查找.
  • 模块内的绝对路径(eg. /site/index): 视图名称以单斜杠开始. 实际的视图文件将在 $moduleview path 下查找.
  • 相对路径(eg. index): 实际的视图文件将在 $viewPath 下查找.

要确定应该应用哪种布局, 请执行以下两个步骤:

  1. 在第一步中, 确定布局名称和上下文模块:
  • 如果将 $layout 指定为字符串, 则将其用作布局名称, 将 $module 用作上下文模块; 否则, 将其用作上下文模块.
  • 如果 $layoutnull, 则搜索该控制器的所有祖先模块, 并找到第一个 layout 不为null的模块. 布局和相应的模块分别用作布局名称和上下文模块. 如果找不到这样的模块, 或者对应的布局不是字符串, 它将返回false, 表示没有适用的布局.
  1. 在第二步中, 它根据先前找到的布局名称和上下文模块确定实际的布局文件. 布局名称可以是:
  • 路径别名 (eg. @app/views/layouts/main);
  • 绝对路径(eg. /main): 布局名称以单斜杠开始. 实际的布局文件将在应用程序的 layout path 下查找;
  • 相对路径(eg. main): 实际的布局文件将在上下文模块的 layout path 下查找.

如果布局名称不包含文件扩展名, 它将使用默认的.php.

public string render ( $view, $params = [] )
$view string

视图名称.

$params array

在视图中应该可用的参数(name-value 对). 这些参数在布局中不可用.

return string

渲染结果.

throws yii\base\InvalidArgumentException

如果视图文件或布局文件不存在.

renderContent() public 方法 (可用自版本: 2.0.1)

通过应用布局渲染静态字符串.

public string renderContent ( $content )
$content string

正在渲染的静态字符串.

return string

布局的渲染结果, 使用给定的静态字符串作为$content变量. 如果禁用布局, 则字符串将返回.

renderFile() public 方法

渲染视图文件.

public string renderFile ( $file, $params = [] )
$file string

要渲染的视图文件. 这可以是文件路径或 路径别名.

$params array

在视图中应该可用的参数(name-value 对).

return string

渲染结果.

throws yii\base\InvalidArgumentException

如果视图文件不存在.

renderPartial() public 方法

渲染视图而不使用布局.

此方法与 render() 的不同之处在于它不应用任何布局.

public string renderPartial ( $view, $params = [] )
$view string

视图名称. 有关如何指定视图名称的信息, 请参阅 render().

$params array

在视图中应该可用的参数(name-value 对).

return string

渲染结果.

throws yii\base\InvalidArgumentException

如果视图文件不存在.

run() public 方法

运行根据路由指定的请求.

该路由可以是该控制器内某个动作的ID, 也可以是由模块ID, 控制器ID和动作ID组成的完整路由. 如果路由以斜杠/开始, 则将从应用程序开始解析路由. 否则, 它将从此控制器的父模块开始.

参见 runAction().

public mixed run ( $route, $params = [] )
$route string

要处理的路由, eg, view, comment/view, /admin/comment/view.

$params array

要传递给动作的参数.

return mixed

动作的执行结果.

runAction() public 方法

使用指定的动作ID和参数在此控制器内运行一个动作.

如果动作ID为空, 则该方法将使用 $defaultAction.

参见 createAction().

public mixed runAction ( $id, $params = [] )
$id string

The 要执行的动作ID.

$params array

要传递给动作的参数(name-value 对).

return mixed

动作的执行结果.

throws yii\base\InvalidRouteException

如果无法将请求的动作ID解析为一个动作.

setView() public 方法

设置此控制器使用的视图对象.

public void setView ( $view )
$view yii\base\View|yii\web\View

可用于渲染视图或视图文件的视图对象.

setViewPath() public 方法 (可用自版本: 2.0.7)

设置包含视图文件的目录.

public void setViewPath ( $path )
$path string

视图文件的根目录.

throws yii\base\InvalidArgumentException

如果该目录无效.

事件详情

EVENT_AFTER_ACTION 事件类型 yii\base\ActionEvent

执行控制器动作后立即触发的事件.

EVENT_BEFORE_ACTION 事件类型 yii\base\ActionEvent

在执行控制器动作之前触发的事件. 你可以将 yii\base\ActionEvent::$isValid 设置为'false', 来取消动作的执行.