控制器动作

2025年3月17日 | 阅读 3 分钟

动作定义在控制器文件中。需要在应用程序中通过 URL 执行请求时调用它们。


创建动作

通过定义一个以单词 **action** 开头的公共方法来创建动作。

示例

**步骤 1** 我们将在 **SampleController.php** 文件中创建一个名为 **index2** 的动作。

**步骤 2** 在浏览器上运行它。

https:///action/frontend/web/index.php?r=sample/index2

YII Controllers action 1

动作 ID

创建动作是为了执行特定的请求,因此通常将其命名为动词,如 create、view、update、delete 等。

动作 ID 只能包含以下字母

  • 小写英文字母
  • 下划线
  • 连字符
  • 英文字母后的数字,如上面示例中的 index2。

可以通过两种方式创建动作

  • 内联动作
  • 独立动作

内联动作

内联动作是控制器类中的一个方法。当它们不需要多次使用并且易于创建时,这些是最常用的动作。

内联动作 ID 名称根据以下几点定义

  • 方法名以 **action** 前缀开头。
  • action 后的单词的第一个字母将为大写。
  • 删除连字符。

例如:

  • Index2 变为 actionIndex2
  • login-form 变为 actionLoginForm

独立动作

独立动作扩展了 **yii\base\Action** 或其子类。当需要在不同的控制器中使用或作为扩展重新分发时,主要创建这些动作。

可以将它们定义为单独的类,然后将它们连接到您的控制器。 这样它们就可以重用。

这些动作必须实现一个名为 **run()** 的方法,并扩展到 **yii\base\Action** 或一个子类。

示例

我们将演示一个简单的独立动作的使用。

**步骤 1** 在 Yii2 文件夹的前端目录中创建一个名为 **standing** 的文件夹。

**步骤 2** 现在在上面创建的文件夹中创建一个 **MultiAction.php** 文件。

查看上面的代码,我们创建了一个名为 **MultiAction** 的独立动作,它扩展到 Action 类。 我们已经实现了 run() 方法。

**步骤 3** 在上面创建的 **SampleController.php** 文件中添加一些额外的代码。

查看上面的代码,actions() 方法返回在 standing 文件夹中创建的独立动作 **multi** 动作。

**步骤 4** 使用以下 URL 在浏览器上运行它,

https:///action/frontend/web/index.php?r=sample/multi

YII Controllers action 2

动作返回值

动作的返回值代表相应动作的结果。

以下示例显示了一个动作通过返回一个响应对象重定向到一个新的 URL。 **redirect()** 方法总是返回一个响应对象。

**步骤 1** 将以下代码添加到 **SampleController.php** 文件中。

**步骤 2** 使用以下 URL 在浏览器上运行它,

https:///action/frontend/web/index.php?r=sample/mysite

上面的 URL 将导致 javatpoint.com 网站显示在您面前。


动作参数

您还可以向动作方法添加参数。 它们的值将使用参数名称作为键从 $_GET 方法中检索。

**步骤 1** 将以下代码添加到 **SampleController.php** 文件中。

**步骤 2** 使用以下 URL 在浏览器上运行它,

https:///action/frontend/web/index.php?r=sample/para&a=Welcome to&b=our site

YII Controllers action 3

在上面的 URL 中,如果您不为 **a** 和 **b** 变量提供任何值,将抛出异常错误。

默认动作

每个控制器文件中总是指定一个默认动作。 默认情况下,它设置为 **index**。

当在路由中,URL 仅包含控制器 ID 时,它会转到默认动作,即 index。 但是,可以通过覆盖来更改此默认值。

namespace app\controllers;

use yii\web\Controller;

下一个主题YII 模块