Yii 使用Actions

Yii 使用Actions

要在控制器类中创建一个action,您应该定义一个公共方法,其名称以action开头。action的返回数据表示要发送给最终用户的响应。

步骤1 - 让我们在 ExampleController 中定义hello-world action。

<?php 
   namespace app\controllers; 
   use yii\web\Controller; 
   class ExampleController extends Controller { 
      public function actionIndex() { 
         message = "index action of the ExampleController";         returnthis->render("example",[ 
            'message' => $message 
         ]); 
      } 
      public function actionHelloWorld() { 
         return "Hello world!"; 
      } 
   } 
?>

步骤2 - 在Web浏览器的地址栏中键入 http://localhost:8080/index.php?r=example/hello-world 。您将看到以下内容。

Yii 使用Actions

操作ID通常是动词,例如创建、更新、删除等。这是因为操作通常被设计为对资源执行特定的更改。

操作ID只能包含以下字符:小写的英文字母、数字、连字符和下划线。

有两种类型的操作:内联操作和独立操作。

内联操作在控制器类中定义。操作的名称是根据操作ID推导出来的,具体规则如下:

  • 将操作ID的所有单词的首字母转为大写。
  • 移除连字符。
  • 添加操作前缀。

示例:

  • index 变为 actionIndex。
  • hello-world(如上面的示例)变为 actionHelloWorld。

如果您计划在不同的地方重用相同的操作,应将其定义为独立操作。

创建独立操作类

为了创建一个独立的操作类,您应该扩展 yii\base\Action 或其子类,并实现一个 run() 方法。

步骤1 - 在项目根目录下创建一个components文件夹。在该文件夹中创建一个名为 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";

         returnthis->render("example",[
            'message' => $message
         ]);
      }
      public function actionHelloWorld() {
         return "Hello world!";
      }
   }
?>

actions() 方法返回一个数组,其值为类名,键为操作ID。

步骤3 - 转到 http://localhost:8080/index.php?r=example/greeting 。您将看到以下输出。

Yii 使用Actions

步骤4 − 您还可以使用 actions 将用户重定向到其他 URL。将以下 action 添加到 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 "firstsecond";
}

步骤6: − 在您的网络浏览器的地址栏中输入以下URL **http://localhost:8080/index.php?r=example/testparams &first=hello&second=world ** ,您将看到以下输出结果。

Yii 使用Actions

每个控制器都有一个默认的动作。当一个路由只包含控制器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 使用Actions

为了满足请求,控制器将经历以下生命周期:

  • yii\base\Controller: init() 方法被调用。

  • 控制器根据动作ID创建动作。

  • 控制器依次调用网页应用程序、模块和控制器的 beforeAction() 方法。

  • 控制器运行动作。

  • 控制器依次调用网页应用程序、模块和控制器的 afterAction() 方法。

  • 应用程序将动作结果赋值给响应。

重要注意事项

控制器应该:

  • 非常薄。每个动作应该只包含少量代码。
  • 使用视图来响应。
  • 不嵌入HTML
  • 访问请求数据。
  • 调用模型的方法。
  • 不处理请求数据。这些应该在模型中处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程