📅  最后修改于: 2020-10-16 07:06:28             🧑  作者: Mango
要在控制器类中创建动作,应定义一个公共方法,该方法的名称以单词action开头。动作的返回数据表示要发送给最终用户的响应。
步骤1-让我们在ExampleController中定义hello-world动作。
render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
步骤2-在Web浏览器的地址栏中输入http:// localhost:8080 / index.php?r = example / hello-world 。您将看到以下内容。
动作ID通常是动词,例如create,update,delete等。这是因为操作通常被设计为在资源上执行特定的更改。
操作ID仅应包含以下字符-小写英文字母,数字,连字符和下划线。
有两种类型的操作:内联操作和独立操作。
内联动作在控制器类中定义。操作名称是通过以下方式从操作ID派生的:
示例–
如果计划在不同位置重用同一动作,则应将其定义为独立动作。
要创建独立的动作类,应扩展yii \ base \ Action或子类,并实现run()方法。
步骤1-在项目根目录内创建一个components文件夹。在该文件夹中,使用以下代码创建一个名为GreetingAction.php的文件。
我们刚刚创建了可重用的操作。要在ExampleController中使用它,我们应该通过重写actions()方法在动作图中声明我们的动作。
步骤2-以这种方式修改ExampleController.php文件。
'app\components\GreetingAction',
];
}
public function actionIndex() {
$message = "index action of the ExampleController";
return $this->render("example",[
'message' => $message
]);
}
public function actionHelloWorld() {
return "Hello world!";
}
}
?>
actions()方法返回一个数组,其值是类名,键是操作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 ,您将看到以下输出。
每个控制器都有一个默认操作。当路由仅包含控制器ID时,表示请求了默认操作。默认情况下,操作是index 。您可以在控制器中轻松覆盖此属性。
第7步–以这种方式修改我们的ExampleController 。
步骤8-现在,如果您转到http:// localhost:8080 / index.php?r = example ,您将看到以下内容。
为了满足请求,控制器将经历以下生命周期-
调用yii \ base \ Controller: init()方法。
控制器根据操作ID创建操作。
控制器顺序调用Web应用程序,模块和控制器的beforeAction()方法。
控制器运行动作。
控制器顺序调用Web应用程序,模块和控制器的afterAction()方法。
应用程序将动作结果分配给响应。
管制员应-