Yii 使用操作
要在控制器类中创建一个动作,您应该定义一个名称以单词action开头的公共方法。操作的返回数据表示要发送给最终用户的响应。
第1步 - 让我们在我们的 ExampleController中 定义hello-world动作。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actionIndex() {
$message = "index action of the ExampleController";
return $this->render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
第2步 - 在Web浏览器的地址栏中键入 http:// localhost:8080 / index.php?r = example / hello-world 。你会看到以下内容。

操作ID通常是动词,如创建,更新,删除等。这是因为操作通常被设计为在资源的情况下执行特定的更改。
操作ID只能包含这些字符 - 英文字母,小写,数字,连字符和下划线。
有两种类型的操作:内联和独立。
内联操作在控制器类中定义。这些操作的名称是以这种方式从动作ID派生的 -
- 将动作ID的所有单词中的第一个字母变为大写。
- 删除连字符。
- 添加操作前缀。
例子 -
- 索引变为actionIndex。
- hello-world(如上例所示)变成actionHelloWorld。
如果您打算在不同地方重复使用相同的操作,则应将其定义为独立操作。
创建一个独立的操作类
要创建一个独立的动作类,你应该扩展yii \ base \ Action或者一个子类,并且实现一个 run() 方法。
第1步 - 在您的项目根目录下创建一个组件文件夹。 在该文件夹内使用以下代码创建一个名为 GreetingAction.php 的文件。
<?php
namespace app\components;
use yii\base\Action;
class GreetingAction extends Action {
public function run() {
return "Greeting";
}
}
?>
我们刚刚创建了一个可重用的操作。要在我们的 ExampleController中 使用它,我们应该通过覆盖actions()方法来在动作映射中声明我们的动作。
第2步 - 以 这种方式修改 ExampleController.php 文件。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public function actions() {
return [
'greeting' => 'app\components\GreetingAction',
];
}
public function actionIndex() {
$message = "index action of the ExampleController";
return $this->render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
的 动作() 方法返回的数组,其值是类名和键动作ID。
第3步 - 转到 http:// localhost:8080 / index.php?r = example / greeting 。您将看到以下输出。

第4步 - 您也可以使用操作将用户重定向到其他URL。 将以下操作添加到 ExampleController.php 。
public function actionOpenGoogle() {
// redirect the user browser to http://google.com
return $this->redirect('http://google.com');
}
现在,如果您打开 http:// localhost:8080 / index.php?r = example / open-google ,您将被重定向到 http://google.com 。
操作方法可以采用称为 操作参数的参数 。它们的值是使用参数名称作为键从 $ _GET 中检索的。
第5步 - 将以下操作添加到我们的示例控制器。
public function actionTestParams($first, $second) {
return "$first $second";
}
第6步 - 在Web浏览器的地址栏中输入URL http:// localhost:8080 / index.php?r = example / testparams&first = hello&second = world ,您将看到以下输出。

每个控制器都有一个默认操作。如果路由仅包含控制器标识,则表示请求缺省操作。默认情况下,该操作是 索引 。您可以轻松地在控制器中覆盖此属性。
第7步 - 以 这种方式修改我们的 ExampleController 。
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public $defaultAction = "hello-world";
/* other actions */
}
?>
第8步 - 现在,如果您转到 http:// localhost:8080 / index.php?r = example ,您将看到以下内容。

为了满足要求,控制器将经历以下生命周期 -
- yii \ base \ Controller: init() 方法被调用。
- 控制器基于动作ID创建动作。
- 控制器依次调用Web应用程序,模块和控制器的 beforeAction() 方法。
- 控制器运行该操作。
- 控制器依次调用Web应用程序,模块和控制器的 afterAction() 方法。
- 应用程序将操作结果分配给响应。
重点
管理人员应该 -
- 非常薄。每个操作只能包含几行代码。
- 使用视图进行回复。
- 不嵌入HTML。
- 访问请求数据。
- 调用模型的方法。
- 不处理请求数据。这些应该在模型中进行处理。
下一章:Yii 模型
模型是代表业务逻辑和规则的对象。要创建模型,您应该扩展 yii \ base \ Model 类或其子类。 属性属性表示业务数据。它们可以像数组元素或对象属性一样访问。每个属性都是模型的可公开访问的属性。要指定模型拥 ...
AI 中文社