创建一个独立的动作类
要创建一个独立的动作类,你应该扩展 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!";
}
}
?>
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。
<?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()方法。
-
应用程序将操作结果分配给响应。