1 关注者

类 yii\rest\ActiveController

继承yii\rest\ActiveController » yii\rest\Controller » yii\web\Controller » yii\base\Controller » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\base\ViewContextInterface
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/rest/ActiveController.php

ActiveController 实现了一组支持对 ActiveRecord 进行 RESTful 访问的通用操作。

ActiveRecord 的类应通过 $modelClass 指定,该类必须实现 yii\db\ActiveRecordInterface。默认情况下,支持以下操作

  • index:模型列表
  • view:返回模型的详细信息
  • create:创建一个新模型
  • update:更新现有模型
  • delete:删除现有模型
  • options:返回允许的 HTTP 方法

您可以通过覆盖 actions() 并取消设置相应的操作来禁用其中一些操作。

要添加新操作,请通过追加新的操作类或编写新的操作方法来覆盖 actions()。确保您也覆盖了 verbs() 以正确声明新操作允许的 HTTP 方法。

通常,您应该覆盖 checkAccess() 以检查当前用户是否有权对指定模型执行指定的操作。

有关 ActiveController 的更多详细信息和用法信息,请参阅 关于 REST 控制器指南文章

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$action yii\base\Action|null 当前正在执行的操作。 yii\base\Controller
$actionParams array 绑定到当前操作的参数。 yii\web\Controller
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$createScenario string 用于创建模型的场景。 yii\rest\ActiveController
$defaultAction string 当请求中未指定操作 ID 时使用的操作 ID。 yii\base\Controller
$enableCsrfValidation boolean 是否为控制器中的操作启用 CSRF 验证。 yii\rest\Controller
$id string 此控制器的 ID。 yii\base\Controller
$layout string|null|false 要应用于此控制器的视图的布局名称。 yii\base\Controller
$modelClass string 模型类名。 yii\rest\ActiveController
$module yii\base\Module 此控制器所属的模块。 yii\base\Controller
$modules yii\base\Module[] 此控制器位于其中的所有祖先模块。 yii\base\Controller
$request yii\base\Request|array|string 请求。 yii\base\Controller
$response yii\base\Response|array|string 响应。 yii\base\Controller
$route string 当前请求的路由(模块 ID、控制器 ID 和操作 ID)。 yii\base\Controller
$serializer string|array 用于创建格式化响应数据的序列化器的配置。 yii\rest\Controller
$uniqueId string 控制器 ID,前面加上模块 ID(如果有)。 yii\base\Controller
$updateScenario string 用于更新模型的场景。 yii\rest\ActiveController
$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() 检查属性是否已设置,即定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
actions() 声明控制器的外部操作。 yii\rest\ActiveController
afterAction() 此方法在执行操作后立即调用。 yii\rest\Controller
asJson() 以 JSON 格式发送数据。 yii\web\Controller
asXml() 以 XML 格式发送数据。 yii\web\Controller
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
beforeAction() 此方法在执行操作前立即调用。 yii\web\Controller
behaviors() 返回此组件应表现为的行为列表。 yii\rest\Controller
bindActionParams() 将参数绑定到操作。 yii\web\Controller
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
checkAccess() 检查当前用户的权限。 yii\rest\ActiveController
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
goBack() 将浏览器重定向到上次访问的页面。 yii\web\Controller
goHome() 将浏览器重定向到主页。 yii\web\Controller
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到命名的事件。 yii\base\Component
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\Component
hasProperty() 返回一个值,指示此组件是否定义了属性。 yii\base\Component
init() 初始化对象。 yii\rest\ActiveController
off() 从此组件分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
redirect() 将浏览器重定向到指定的 URL。 yii\web\Controller
refresh() 刷新当前页面。 yii\web\Controller
render() 渲染视图,并在可用时应用布局。 yii\base\Controller
renderAjax() 响应 AJAX 请求渲染视图。 yii\web\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
serializeData() 序列化指定的数据。 yii\rest\Controller
verbs() 声明允许的 HTTP 动词。 yii\rest\ActiveController

事件

隐藏继承的事件

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

属性详细信息

隐藏继承的属性

$createScenario 公共属性

用于创建模型的场景。

另请参见 yii\base\Model::scenarios().

public string $createScenario = \yii\base\Model::SCENARIO_DEFAULT
$modelClass 公共属性

模型类名。必须设置此属性。

public string $modelClass null
$updateScenario 公共属性

用于更新模型的场景。

另请参见 yii\base\Model::scenarios().

public string $updateScenario = \yii\base\Model::SCENARIO_DEFAULT

方法详细信息

隐藏继承的方法

__call() 公共方法

定义在: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查任何附加的行为是否具有命名的方法,如果可用,将执行它。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义在: yii\base\Component::__clone()

此方法在通过克隆现有对象创建对象后被调用。

它会移除所有行为,因为它们附加到旧对象。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法
public void __construct ( $id, $module, $config = [] )
$id string

此控制器的 ID。

$module yii\base\Module

此控制器所属的模块。

$config array

将用于初始化对象属性的名称-值对。

                public function __construct($id, $module, $config = [])
{
    $this->id = $id;
    $this->module = $module;
    parent::__construct($config);
}

            
__get() 公共方法

定义在: yii\base\Component::__get()

返回组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 getter 定义的属性:返回 getter 结果
  • 行为的属性:返回行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,它会在执行 $value = $component->property; 时被隐式调用。

另请参见 __set().

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值或行为属性的值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只写属性。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定义在: yii\base\Component::__isset()

检查属性是否已设置,即定义且不为空。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

不要直接调用此方法,因为它是一个 PHP 魔术方法,它会在执行 isset($component->property) 时被隐式调用。

另请参见 https://php.ac.cn/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义在: yii\base\Component::__set()

设置组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:设置属性值
  • 以 "on xyz" 格式的事件:将处理程序附加到事件 "xyz"
  • 以 "as xyz" 格式的行为:附加名为 "xyz" 的行为
  • 行为的属性:设置行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,它会在执行 $component->property = $value; 时被隐式调用。

另请参见 __get().

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只读属性。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定义在: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的一个属性:将属性值设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 `unset($component->property)` 时会隐式调用。

另请参见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名称

throws yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
actions() 公共方法

声明控制器的外部操作。

此方法用于覆盖,以声明控制器的外部操作。它应该返回一个数组,数组键为操作 ID,数组值为相应的操作类名或操作配置数组。例如,

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

Yii::createObject() 将随后用于使用此处提供的配置创建请求的操作。

public array actions ( )

                public function actions()
{
    return [
        'index' => [
            'class' => 'yii\rest\IndexAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'view' => [
            'class' => 'yii\rest\ViewAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'create' => [
            'class' => 'yii\rest\CreateAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
            'scenario' => $this->createScenario,
        ],
        'update' => [
            'class' => 'yii\rest\UpdateAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
            'scenario' => $this->updateScenario,
        ],
        'delete' => [
            'class' => 'yii\rest\DeleteAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'options' => [
            'class' => 'yii\rest\OptionsAction',
        ],
    ];
}

            
afterAction() 公共方法

定义在: yii\rest\Controller::afterAction()

此方法在执行操作后立即调用。

该方法将触发 EVENT_AFTER_ACTION 事件。该方法的返回值将用作操作返回值。

如果您覆盖此方法,您的代码应如下所示

public function afterAction($action, $result)
{
    $result = parent::afterAction($action, $result);
    // your custom code here
    return $result;
}
public mixed afterAction ( $action, $result )
$action yii\base\Action

刚刚执行的操作。

$result mixed

操作返回结果。

return mixed

处理后的操作结果。

                public function afterAction($action, $result)
{
    $result = parent::afterAction($action, $result);
    return $this->serializeData($result);
}

            
asJson() 公共方法 (自版本 2.0.11 起可用)

定义在: yii\web\Controller::asJson()

以 JSON 格式发送数据。

此方法是发送 JSON 格式数据的快捷方式。它将在配置 format 并设置要格式化的 data 后返回 response 应用程序组件。常见的用法是

return $this->asJson($data);

另请参见

public yii\web\Response asJson ( $data )
$data mixed

要格式化的数据。

return yii\web\Response

配置为发送 $data 作为 JSON 格式的响应。

                public function asJson($data)
{
    $this->response->format = Response::FORMAT_JSON;
    $this->response->data = $data;
    return $this->response;
}

            
asXml() 公共方法 (自版本 2.0.11 起可用)

定义在: yii\web\Controller::asXml()

以 XML 格式发送数据。

此方法是发送 XML 格式数据的快捷方式。它将在配置 format 并设置要格式化的 data 后返回 response 应用程序组件。常见的用法是

return $this->asXml($data);

另请参见

public yii\web\Response asXml ( $data )
$data mixed

要格式化的数据。

return yii\web\Response

配置为发送 $data 作为 XML 格式的响应。

                public function asXml($data)
{
    $this->response->format = Response::FORMAT_XML;
    $this->response->data = $data;
    return $this->response;
}

            
attachBehavior() 公共方法

定义在: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另请参见 detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。这可以是以下之一

return yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义在: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是 yii\base\Behavior 对象、指定行为类的字符串或用于创建行为的配置数组。

另请参见 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
beforeAction() 公共方法

定义在: yii\web\Controller::beforeAction()

此方法在执行操作前立即调用。

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

如果操作不应该运行,请求应该在 beforeAction 代码中处理,方法是提供必要的输出或重定向请求。否则响应将为空。

如果您覆盖此方法,您的代码应如下所示

public function beforeAction($action)
{
    // your custom code here, if you want the code to run before action filters,
    // which are triggered on the [[EVENT_BEFORE_ACTION]] event, e.g. PageCache or AccessControl

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

    // other custom code here

    return true; // or false to not run the action
}
public boolean beforeAction ( $action )
$action yii\base\Action

要执行的操作。

return boolean

操作是否应该继续运行。

                public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !$this->request->validateCsrfToken()) {
            throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
        }
        return true;
    }
    return false;
}

            
behaviors() 公共方法

定义在: yii\rest\Controller::behaviors()

返回此组件应表现为的行为列表。

子类可以覆盖此方法以指定它们想要表现的行为。

此方法的返回值应该是一个行为对象或配置数组,由行为名称索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须从 yii\base\Behavior 扩展。行为可以使用名称或匿名方式附加。当名称用作数组键时,使用此名称,行为可以稍后使用 getBehavior() 检索,或使用 detachBehavior() 分离。匿名行为无法检索或分离。

在此方法中声明的行为将自动(按需)附加到组件。

public array behaviors ( )
return array

行为配置。

                public function behaviors()
{
    return [
        'contentNegotiator' => [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
                'application/xml' => Response::FORMAT_XML,
            ],
        ],
        'verbFilter' => [
            'class' => VerbFilter::className(),
            'actions' => $this->verbs(),
        ],
        'authenticator' => [
            'class' => CompositeAuth::className(),
        ],
        'rateLimiter' => [
            'class' => RateLimiter::className(),
        ],
    ];
}

            
bindActionParams() 公共方法

定义在: yii\web\Controller::bindActionParams()

将参数绑定到操作。

此方法由 yii\base\Action 在使用给定参数开始运行时调用。此方法将检查操作需要的参数名称,并根据要求返回提供的参数。如果缺少任何参数,将抛出异常。

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

要绑定参数的操作

$params array

要绑定到操作的参数

return array

操作可以运行的有效参数。

throws yii\web\BadRequestHttpException

如果缺少或无效参数。

                public function bindActionParams($action, $params)
{
    if ($action instanceof InlineAction) {
        $method = new \ReflectionMethod($this, $action->actionMethod);
    } else {
        $method = new \ReflectionMethod($action, 'run');
    }
    $args = [];
    $missing = [];
    $actionParams = [];
    $requestedParams = [];
    foreach ($method->getParameters() as $param) {
        $name = $param->getName();
        if (array_key_exists($name, $params)) {
            $isValid = true;
            if (PHP_VERSION_ID >= 80000) {
                $isArray = ($type = $param->getType()) instanceof \ReflectionNamedType && $type->getName() === 'array';
            } else {
                $isArray = $param->isArray();
            }
            if ($isArray) {
                $params[$name] = (array)$params[$name];
            } elseif (is_array($params[$name])) {
                $isValid = false;
            } elseif (
                PHP_VERSION_ID >= 70000
                && ($type = $param->getType()) !== null
                && method_exists($type, 'isBuiltin')
                && $type->isBuiltin()
                && ($params[$name] !== null || !$type->allowsNull())
            ) {
                $typeName = PHP_VERSION_ID >= 70100 ? $type->getName() : (string)$type;
                if ($params[$name] === '' && $type->allowsNull()) {
                    if ($typeName !== 'string') { // for old string behavior compatibility
                        $params[$name] = null;
                    }
                } else {
                    switch ($typeName) {
                        case 'int':
                            $params[$name] = filter_var($params[$name], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
                            break;
                        case 'float':
                            $params[$name] = filter_var($params[$name], FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE);
                            break;
                        case 'bool':
                            $params[$name] = filter_var($params[$name], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
                            break;
                    }
                    if ($params[$name] === null) {
                        $isValid = false;
                    }
                }
            }
            if (!$isValid) {
                throw new BadRequestHttpException(
                    Yii::t('yii', 'Invalid data received for parameter "{param}".', ['param' => $name])
                );
            }
            $args[] = $actionParams[$name] = $params[$name];
            unset($params[$name]);
        } elseif (
            PHP_VERSION_ID >= 70100
            && ($type = $param->getType()) !== null
            && $type instanceof \ReflectionNamedType
            && !$type->isBuiltin()
        ) {
            try {
                $this->bindInjectedParams($type, $name, $args, $requestedParams);
            } catch (HttpException $e) {
                throw $e;
            } catch (Exception $e) {
                throw new ServerErrorHttpException($e->getMessage(), 0, $e);
            }
        } elseif ($param->isDefaultValueAvailable()) {
            $args[] = $actionParams[$name] = $param->getDefaultValue();
        } else {
            $missing[] = $name;
        }
    }
    if (!empty($missing)) {
        throw new BadRequestHttpException(
            Yii::t('yii', 'Missing required parameters: {params}', ['params' => implode(', ', $missing)])
        );
    }
    $this->actionParams = $actionParams;
    // We use a different array here, specifically one that doesn't contain service instances but descriptions instead.
    if (Yii::$app->requestedParams === null) {
        Yii::$app->requestedParams = array_merge($actionParams, $requestedParams);
    }
    return $args;
}

            
bindInjectedParams() 受保护的方法 (从版本 2.0.36 开始可用)

定义于: yii\base\Controller::bindInjectedParams()

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

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

操作参数的反射类型。

$name string

参数的名称。

$args array

操作的参数数组,此函数可能向其追加项。

$requestedParams array

包含请求参数的数组,此函数可能写入特定键。

throws yii\base\ErrorException

当我们无法加载所需的 service 时。

throws yii\base\InvalidConfigException

当 DI 配置中存在错误时抛出。

throws yii\di\NotInstantiableException

当定义无法解析为具体类(例如接口类型提示)并且容器中没有适当的定义时抛出。

                final protected function bindInjectedParams(\ReflectionType $type, $name, &$args, &$requestedParams)
{
    // Since it is not a builtin type it must be DI injection.
    $typeName = $type->getName();
    if (($component = $this->module->get($name, false)) instanceof $typeName) {
        $args[] = $component;
        $requestedParams[$name] = 'Component: ' . get_class($component) . " \$$name";
    } elseif ($this->module->has($typeName) && ($service = $this->module->get($typeName)) instanceof $typeName) {
        $args[] = $service;
        $requestedParams[$name] = 'Module ' . get_class($this->module) . " DI: $typeName \$$name";
    } elseif (\Yii::$container->has($typeName) && ($service = \Yii::$container->get($typeName)) instanceof $typeName) {
        $args[] = $service;
        $requestedParams[$name] = "Container DI: $typeName \$$name";
    } elseif ($type->allowsNull()) {
        $args[] = null;
        $requestedParams[$name] = "Unavailable service: $name";
    } else {
        throw new Exception('Could not load required service: ' . $name);
    }
}

            
canGetProperty() 公共方法

定义于: yii\base\Component::canGetProperty()

返回一个值,指示是否可以读取属性。

如果可以读取属性,则

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为真时)。

另请参见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

定义于: yii\base\Component::canSetProperty()

返回一个值,指示是否可以设置属性。

如果可以写入属性,则

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为真时)。

另请参见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
checkAccess() 公共方法

检查当前用户的权限。

此方法应被覆盖以检查当前用户是否拥有对指定数据模型运行指定操作的特权。如果用户没有访问权限,则应抛出 yii\web\ForbiddenHttpException

public void checkAccess ( $action, $model null, $params = [] )
$action string

要执行的操作的 ID

$model object|null

要访问的模型。如果为 null,则表示没有访问特定模型。

$params array

其他参数

throws yii\web\ForbiddenHttpException

如果用户没有访问权限

                public function checkAccess($action, $model = null, $params = [])
{
}

            
className() 公共静态方法
从 2.0.14 版本开始弃用。在 PHP >=5.5 上,使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
createAction() 公共方法

定义于: yii\base\Controller::createAction()

根据给定的操作 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。

                public function createAction($id)
{
    if ($id === '') {
        $id = $this->defaultAction;
    }
    $actionMap = $this->actions();
    if (isset($actionMap[$id])) {
        return Yii::createObject($actionMap[$id], [$id, $this]);
    }
    if (preg_match('/^(?:[a-z0-9_]+-)*[a-z0-9_]+$/', $id)) {
        $methodName = 'action' . str_replace(' ', '', ucwords(str_replace('-', ' ', $id)));
        if (method_exists($this, $methodName)) {
            $method = new \ReflectionMethod($this, $methodName);
            if ($method->isPublic() && $method->getName() === $methodName) {
                return new InlineAction($id, $this, $methodName);
            }
        }
    }
    return null;
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

return yii\base\Behavior|null

已分离的行为。如果行为不存在,则为 null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保在 behaviors() 中声明的行为附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
findLayoutFile() 公共方法

定义于: yii\base\Controller::findLayoutFile()

查找适用的布局文件。

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

用于渲染布局文件的视图对象。

return string|boolean

布局文件路径,如果不需要布局则为 false。请参考 render() 如何指定此参数。

throws yii\base\InvalidArgumentException

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

                public function findLayoutFile($view)
{
    $module = $this->module;
    $layout = null;
    if (is_string($this->layout)) {
        $layout = $this->layout;
    } elseif ($this->layout === null) {
        while ($module !== null && $module->layout === null) {
            $module = $module->module;
        }
        if ($module !== null && is_string($module->layout)) {
            $layout = $module->layout;
        }
    }
    if ($layout === null) {
        return false;
    }
    if (strncmp($layout, '@', 1) === 0) {
        $file = Yii::getAlias($layout);
    } elseif (strncmp($layout, '/', 1) === 0) {
        $file = Yii::$app->getLayoutPath() . DIRECTORY_SEPARATOR . substr($layout, 1);
    } else {
        $file = $module->getLayoutPath() . DIRECTORY_SEPARATOR . $layout;
    }
    if (pathinfo($file, PATHINFO_EXTENSION) !== '') {
        return $file;
    }
    $path = $file . '.' . $view->defaultExtension;
    if ($view->defaultExtension !== 'php' && !is_file($path)) {
        $path = $file . '.php';
    }
    return $path;
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

return yii\base\Behavior|null

行为对象,如果行为不存在则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getModules() 公共方法

定义于: yii\base\Controller::getModules()

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

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

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

此控制器位于其中的所有祖先模块。

                public function getModules()
{
    $modules = [$this->module];
    $module = $this->module;
    while ($module->module !== null) {
        array_unshift($modules, $module->module);
        $module = $module->module;
    }
    return $modules;
}

            
getRoute() 公共方法

定义于: yii\base\Controller::getRoute()

返回当前请求的路由。

public string getRoute ( )
return string

当前请求的路由(模块 ID、控制器 ID 和操作 ID)。

                public function getRoute()
{
    return $this->action !== null ? $this->action->getUniqueId() : $this->getUniqueId();
}

            
getUniqueId() 公共方法

定义于: yii\base\Controller::getUniqueId()

返回控制器的唯一 ID。

public string getUniqueId ( )
return string

控制器 ID,前面加上模块 ID(如果有)。

                public function getUniqueId()
{
    return $this->module instanceof Application ? $this->id : $this->module->getUniqueId() . '/' . $this->id;
}

            
getView() 公共方法

定义于: yii\base\Controller::getView()

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

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

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

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

                public function getView()
{
    if ($this->_view === null) {
        $this->_view = Yii::$app->getView();
    }
    return $this->_view;
}

            
getViewPath() 公共方法

定义于: yii\base\Controller::getViewPath()

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

默认实现返回控制器 $id$module$viewPath 目录下命名的目录。

public string getViewPath ( )
return string

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

                public function getViewPath()
{
    if ($this->_viewPath === null) {
        $this->_viewPath = $this->module->getViewPath() . DIRECTORY_SEPARATOR . $this->id;
    }
    return $this->_viewPath;
}

            
goBack() 公共方法

定义于: yii\web\Controller::goBack()

将浏览器重定向到上次访问的页面。

您可以在操作中使用此方法,方法是直接返回 yii\web\Response

// stop executing this action and redirect to last visited page
return $this->goBack();

为了使此功能正常工作,您必须 在适当的地方设置返回 URL

另请参阅 yii\web\User::getReturnUrl()

public yii\web\Response goBack ( $defaultUrl null )
$defaultUrl string|array|null

如果之前未设置,则为默认返回 URL。如果此值为 null 且之前未设置返回 URL,则会重定向到 yii\web\Application::$homeUrl。请参考 yii\web\User::setReturnUrl() 关于 URL 的接受格式。

return yii\web\Response

当前响应对象

                public function goBack($defaultUrl = null)
{
    return $this->response->redirect(Yii::$app->getUser()->getReturnUrl($defaultUrl));
}

            
goHome() 公共方法

定义于: yii\web\Controller::goHome()

将浏览器重定向到主页。

您可以在操作中使用此方法,方法是直接返回 yii\web\Response

// stop executing this action and redirect to home page
return $this->goHome();
public yii\web\Response goHome ( )
return yii\web\Response

当前响应对象

                public function goHome()
{
    return $this->response->redirect(Yii::$app->getHomeUrl());
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否有任何处理程序附加到命名的事件。

public boolean hasEventHandlers ( $name )
$name string

事件名称

return boolean

是否有任何处理程序附加到该事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

定义于: yii\base\Component::hasMethod()

返回一个值,指示方法是否已定义。

方法定义如下

  • 该类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

return boolean

方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

定义于: yii\base\Component::hasProperty()

返回一个值,指示此组件是否定义了属性。

属性定义如下

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另请参见

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

属性是否已定义

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public method (available since version 2.0.36)

初始化对象。

此方法在对象使用给定配置初始化后,在构造函数结束时被调用。

public void init ( )

                public function init()
{
    parent::init();
    if ($this->modelClass === null) {
        throw new InvalidConfigException('The "modelClass" property must be set.');
    }
}

            
off() public method

定义于: yii\base\Component::off()

从此组件分离现有的事件处理程序。

此方法是 on() 的反方法。

注意:如果为事件名称传递了通配符模式,则只会删除使用此通配符注册的处理程序,而使用与此通配符匹配的普通名称注册的处理程序将保留。

另见 on().

public boolean off ( $name, $handler null )
$name string

事件名称

$handler callable|null

要移除的事件处理程序。如果为 null,则会移除附加到指定事件的所有处理程序。

return boolean

如果找到并分离了处理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是一个有效的 PHP 回调函数。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件关联的参数。

从 2.0.14 版本开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另见 off().

public void on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler callable

事件处理程序

$data mixed

要传递给事件处理程序的数据,当事件被触发时。当事件处理程序被调用时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新的处理程序将被插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
redirect() public method

定义于: yii\web\Controller::redirect()

将浏览器重定向到指定的 URL。

此方法是 yii\web\Response::redirect() 的快捷方式。

您可以在操作中通过直接返回 yii\web\Response 来使用它

// stop executing this action and redirect to login page
return $this->redirect(['login']);
public yii\web\Response redirect ( $url, $statusCode 302 )
$url string|array

要重定向到的 URL。可以是以下格式之一

  • 表示 URL 的字符串(例如 "https://example.com")
  • 表示 URL 别名的字符串(例如 "@example.com")
  • 格式为 [$route, ...name-value pairs...] 的数组(例如 ['site/index', 'ref' => 1]yii\helpers\Url::to() 将用于将数组转换为 URL。

任何以单个正斜杠 "/" 开头的相对 URL 将通过在前面添加当前请求的主机信息来转换为绝对 URL。

$statusCode integer

HTTP 状态代码。默认为 302。有关 HTTP 状态代码的详细信息,请参见 https://tools.ietf.org/html/rfc2616#section-10

return yii\web\Response

当前响应对象

                public function redirect($url, $statusCode = 302)
{
    // calling Url::to() here because Response::redirect() modifies route before calling Url::to()
    return $this->response->redirect(Url::to($url), $statusCode);
}

            
refresh() public method

定义于: yii\web\Controller::refresh()

刷新当前页面。

此方法是 yii\web\Response::refresh() 的快捷方式。

您可以在操作中通过直接返回 yii\web\Response 来使用它

// stop executing this action and refresh the current page
return $this->refresh();
public yii\web\Response refresh ( $anchor '' )
$anchor string

要附加到重定向 URL 的锚点。默认为空。如果您要指定它,请确保锚点以 '#' 开头。

return yii\web\Response

响应对象本身

                public function refresh($anchor = '')
{
    return $this->response->redirect($this->request->getUrl() . $anchor);
}

            
render() public method

定义于: yii\base\Controller::render()

渲染视图,并在可用时应用布局。

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

  • 路径别名(例如 "@app/views/site/index");
  • 应用程序中的绝对路径(例如 "//site/index"):视图名称以双斜杠开头。实际的视图文件将在应用程序的 视图路径 下查找。
  • 模块中的绝对路径(例如 "/site/index"):视图名称以单个斜杠开头。实际的视图文件将在 视图路径 下查找 $module.
  • 相对路径(例如 "index"):实际的视图文件将在 $viewPath 下查找。

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

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

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

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

视图名称。

$params array

应该在视图中可用的参数(名称-值对)。这些参数在布局中将不可用。

return string

渲染结果。

throws yii\base\InvalidArgumentException

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

                public function render($view, $params = [])
{
    $content = $this->getView()->render($view, $params, $this);
    return $this->renderContent($content);
}

            
renderAjax() public method

定义于: yii\web\Controller::renderAjax()

响应 AJAX 请求渲染视图。

此方法类似于 renderPartial(),不同之处在于它会将已在视图中注册的 JS/CSS 脚本和文件注入渲染结果。因此,您应该使用此方法而不是 renderPartial() 来渲染一个视图来响应 AJAX 请求。

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

视图名称。请参考 render() 如何指定视图名称。

$params array

要在视图中使用的参数(名称-值对)。

return string

渲染结果。

                public function renderAjax($view, $params = [])
{
    return $this->getView()->renderAjax($view, $params, $this);
}

            
renderContent() public method (available since version 2.0.1)

定义于: yii\base\Controller::renderContent()

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

public string renderContent ( $content )
$content string

正在渲染的静态字符串

return string

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

                public function renderContent($content)
{
    $layoutFile = $this->findLayoutFile($this->getView());
    if ($layoutFile !== false) {
        return $this->getView()->renderFile($layoutFile, ['content' => $content], $this);
    }
    return $content;
}

            
renderFile() public method

定义于: yii\base\Controller::renderFile()

渲染视图文件。

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

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

$params array

要在视图中使用的参数(名称-值对)。

return string

渲染结果。

throws yii\base\InvalidArgumentException

如果视图文件不存在。

                public function renderFile($file, $params = [])
{
    return $this->getView()->renderFile($file, $params, $this);
}

            
renderPartial() public method

定义于: yii\base\Controller::renderPartial()

渲染视图而不应用布局。

此方法与 render() 不同,它不应用任何布局。

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

视图名称。请参考 render() 如何指定视图名称。

$params array

要在视图中使用的参数(名称-值对)。

return string

渲染结果。

throws yii\base\InvalidArgumentException

如果视图文件不存在。

                public function renderPartial($view, $params = [])
{
    return $this->getView()->render($view, $params, $this);
}

            
run() public method

定义于: yii\base\Controller::run()

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

路由可以是此控制器中操作的 ID,也可以是包含模块 ID、控制器 ID 和操作 ID 的完整路由。如果路由以斜杠“/”开头,则路由的解析将从应用程序开始;否则,它将从此控制器的父模块开始。

另请参阅 runAction()

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

要处理的路由,例如,'view'、'comment/view'、'/admin/comment/view'。

$params array

要传递给操作的参数。

return mixed

操作的结果。

                public function run($route, $params = [])
{
    $pos = strpos($route, '/');
    if ($pos === false) {
        return $this->runAction($route, $params);
    } elseif ($pos > 0) {
        return $this->module->runAction($route, $params);
    }
    return Yii::$app->runAction(ltrim($route, '/'), $params);
}

            
runAction() public method

定义于: yii\base\Controller::runAction()

使用指定的动作 ID 和参数在此控制器中运行动作。

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

另请参阅 createAction()

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

要执行的操作的 ID。

$params array

要传递给操作的参数(名称-值对)。

return mixed

操作的结果。

throws yii\base\InvalidRouteException

如果请求的操作 ID 无法成功解析为操作。

                public function runAction($id, $params = [])
{
    $action = $this->createAction($id);
    if ($action === null) {
        throw new InvalidRouteException('Unable to resolve the request: ' . $this->getUniqueId() . '/' . $id);
    }
    Yii::debug('Route to run: ' . $action->getUniqueId(), __METHOD__);
    if (Yii::$app->requestedAction === null) {
        Yii::$app->requestedAction = $action;
    }
    $oldAction = $this->action;
    $this->action = $action;
    $modules = [];
    $runAction = true;
    // call beforeAction on modules
    foreach ($this->getModules() as $module) {
        if ($module->beforeAction($action)) {
            array_unshift($modules, $module);
        } else {
            $runAction = false;
            break;
        }
    }
    $result = null;
    if ($runAction && $this->beforeAction($action)) {
        // run the action
        $result = $action->runWithParams($params);
        $result = $this->afterAction($action, $result);
        // call afterAction on modules
        foreach ($modules as $module) {
            /* @var $module Module */
            $result = $module->afterAction($action, $result);
        }
    }
    if ($oldAction !== null) {
        $this->action = $oldAction;
    }
    return $result;
}

            
serializeData() protected method

定义于: yii\rest\Controller::serializeData()

序列化指定的数据。

默认实现将根据 $serializer 给出的配置创建序列化器。然后使用序列化器来序列化给定的数据。

protected mixed serializeData ( $data )
$data mixed

要序列化的数据

return mixed

序列化后的数据。

                protected function serializeData($data)
{
    return Yii::createObject($this->serializer)->serialize($data);
}

            
setView() public method

定义于: yii\base\Controller::setView()

设置要由此控制器使用的视图对象。

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

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

                public function setView($view)
{
    $this->_view = $view;
}

            
setViewPath() public method (available since version 2.0.7)

定义于: yii\base\Controller::setViewPath()

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

public void setViewPath ( $path )
$path string

视图文件的根目录。

throws yii\base\InvalidArgumentException

如果目录无效

                public function setViewPath($path)
{
    $this->_viewPath = Yii::getAlias($path);
}

            
trigger() public method

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级别的处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
verbs() protected method

声明允许的 HTTP 动词。

请参考 yii\filters\VerbFilter::$actions 如何声明允许的动词。

protected array verbs ( )
return array

允许的 HTTP 动词。

                protected function verbs()
{
    return [
        'index' => ['GET', 'HEAD'],
        'view' => ['GET', 'HEAD'],
        'create' => ['POST'],
        'update' => ['PUT', 'PATCH'],
        'delete' => ['DELETE'],
    ];
}