- Yii 教程
- Yii - 首页
- Yii - 概述
- Yii - 安装
- Yii - 创建页面
- Yii - 应用结构
- Yii - 入口脚本
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模块
- Yii - 视图
- Yii - 布局
- Yii - 资源
- Yii - 资源转换
- Yii - 扩展
- Yii - 创建扩展
- Yii - HTTP 请求
- Yii - 响应
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 规则
- Yii - HTML 表单
- Yii - 验证
- Yii - 特设验证
- Yii - AJAX 验证
- Yii - 会话
- Yii - 使用闪存数据
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 文件上传
- Yii - 格式化
- Yii - 分页
- Yii - 排序
- Yii - 属性
- Yii - 数据提供者
- Yii - 数据小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 创建事件
- Yii - 行为
- Yii - 创建行为
- Yii - 配置
- Yii - 依赖注入
- Yii - 数据库访问
- Yii - 数据访问对象
- Yii - 查询构建器
- Yii - 活动记录
- Yii - 数据库迁移
- Yii - 主题
- Yii - RESTful API
- Yii - RESTful API 实战
- Yii - 字段
- Yii - 测试
- Yii - 缓存
- Yii - 片段缓存
- Yii - 别名
- Yii - 日志记录
- Yii - 错误处理
- Yii - 身份验证
- Yii - 授权
- Yii - 本地化
- Yii - Gii
- Gii – 创建模型
- Gii – 生成控制器
- Gii – 生成模块
- Yii 有用资源
- Yii - 快速指南
- Yii - 有用资源
- Yii - 讨论
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 浏览器的地址栏中键入 https://127.0.0.1:8080/index.php?r=example/hello-world。您将看到以下内容。
操作 ID 通常是动词,例如 create、update、delete 等。这是因为操作通常被设计为对资源执行特定的更改。
操作 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"; return $this->render("example",[ 'message' => $message ]); } public function actionHelloWorld() { return "Hello world!"; } } ?>
actions() 方法返回一个数组,其值是类名,键是操作 ID。
步骤 3 - 转到 https://127.0.0.1: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'); }
现在,如果您打开 https://127.0.0.1:8080/index.php?r=example/open-google,您将被重定向到 http://google.com。
操作方法可以采用参数,称为操作参数。它们的值使用参数名称作为键从 $_GET 中检索。
步骤 5 - 将以下操作添加到我们的示例控制器。
public function actionTestParams($first, $second) { return "$first $second"; }
步骤 6 - 在 Web 浏览器的地址栏中键入 URL https://127.0.0.1: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 - 现在,如果您转到 https://127.0.0.1:8080/index.php?r=example,您将看到以下内容。
为了满足请求,控制器将经历以下生命周期 -
调用 yii\base\Controller:init() 方法。
控制器根据操作 ID 创建一个操作。
控制器依次调用 Web 应用程序、模块和控制器的 beforeAction() 方法。
控制器运行操作。
控制器依次调用 Web 应用程序、模块和控制器的 afterAction() 方法。
应用程序将操作结果分配给响应。
重要事项
控制器应 -
- 非常精简。每个操作都应只包含几行代码。
- 使用视图进行响应。
- 不嵌入 HTML。
- 访问请求数据。
- 调用模型的方法。
- 不处理请求数据。这些应在模型中处理。