php yii2学习笔记(一) 创建动作和视图

  1. 如何创建一个动作去响应请求,
  2. 如何创建一个视图去构造响应内容,
  3. 以及一个应用如何分派请求给动作

创建动作

对于“Hello”任务,需要创建一个 say 动作, 从请求中接收 message 参数并显示给最终用户。如果请求没有提供 message 参数, 动作将显示默认参数 “Hello”。

注意: 动作是最终用户可以直接访问并执行的对象。 动作被组织在控制器中。 一个动作的执行结果就是最终用户收到的响应内容。

 

动作必须声明在控制器中。为了简单起见, 你可以在现存的 SiteController 控制器里声明 say 动作。这个控制器定义在 controllers/SiteController.php 类文件中。 以下是一个动作的声明:

<?php

namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    // ...现存的代码...

    public function actionSay($message = 'Hello')
    {
        return $this->render('say', ['message' => $message]);
    }
}

在上述 SiteController 代码中,say 动作被定义为 actionSay 方法。 Yii 使用 action 前缀区分普通方法和动作。 action 前缀后面的名称被映射为动作的 ID。

涉及到给动作命名时,你应该理解 Yii 如何处理操作 ID。 动作 ID 总是被以小写处理,如果一个操作 ID 由多个单词组成, 单词之间将由破折号连接(如 create-comment)。动作 ID 映射为方法名时移除了破折号, 将每个单词首字母大写,并加上 action 前缀。 比如:动作 ID create-comment 对应方法名 actionCreateComment

上述代码中的动作方法接受一个参数 $message, 它的默认值是 “Hello”(就像你设置 PHP 中其它函数或方法的默认值一样)。 当应用接收到请求并确定由 say 动作来响应请求时,应用将从请求的参数中寻找对应值传入进来。 换句话说,如果请求包含一个 message 参数,它的值是 “Goodybye”, 动作方法中的 $message 变量也将赋值为 “Goodbye”

在动作方法中,yii\web\Controller::render() 被用来渲染一个名为 say 的视图文件。 message 参数也被传入视图,这样就可以在里面使用。动作方法会返回渲染结果。 结果会被应用接收并显示给最终用户的浏览器(作为整页 HTML 的一部分)。

创建视图

视图是你用来生成响应内容的脚本。为了说 “Hello”, 你需要创建一个 say 视图,以便显示从动作方法中传来的 message 参数。

<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>

say 视图应该存为 views/site/say.php 文件。当一个动作中调用了 yii\web\Controller::render() 方法时, 它将会寻找名为 views/控制器 ID/视图名.php 的PHP文件。。

注意以上代码,message 参数在输出之前被 yii\helpers\Html::encode() 方法处理过。 这很有必要,当参数来自于最终用户时, 参数中可能隐含的恶意 JavaScript 代码会导致 跨站脚本(XSS)攻击

当然了,你大概会在 say 视图里放入更多内容。内容可以由 HTML 标签,纯文本, 甚至 PHP 语句组成。实际上 say 视图就是一个由 yii\web\Controller::render() 执行的 PHP 脚本。 视图脚本输出的内容将会作为响应结果返回给应用。应用将依次输出结果给最终用户。

试运行

创建完动作和视图后,你就可以通过下面的 URL 访问新页面了:

http://hostname/index.php?r=site/say&message=Hello+World

Hello World

这个 URL 将会输出包含 “Hello World” 的页面,页面和应用里的其它页面使用同样的头部和尾部。

如果你省略 URL 中的 message 参数,将会看到页面只显示 “Hello”。 这是因为 message 被作为一个参数传给 actionSay() 方法,当省略它时,参数将使用默认的 “Hello” 代替。

注意: 新页面和其它页面使用同样的头部和尾部是因为 yii\web\Controller::render() 方法会 自动把 say 视图执行的结果嵌入称为布局的文件中, 位于 views/layouts/main.php

上面 URL 中的参数 r 需要更多解释。 它代表路由,是整个应用级的, 指向特定动作的独立 ID。路由格式是 控制器 ID/操作 ID。应用接受请求的时候会检查参数, 使用控制器 ID 去确定哪个控制器应该被用来处理请求。 然后相应控制器将使用动作 ID 去确定哪个操作方法将被用来做具体工作。 在本例子中,路由 site/say 将被解析至 SiteController 控制器和其中的 say 动作。 因此 SiteController::actionSay() 方法将被调用处理请求。

注意: 与动作一样,一个应用中控制器同样有唯一的 ID。 控制器 ID 和动作 ID 使用同样的命名规则。 控制器的类名源自于控制器 ID,移除了破折号 ,每个单词首字母大写,并加上 Controller 后缀。 例子:控制器 ID post-comment 对应控制器类名 PostCommentController

总结

通过本章节你接触了 MVC 设计模式中的控制器和视图部分。 创建了一个动作作为控制器的一部分去处理特定请求。然后又创建了一个视图去构造响应内容。 在这个小例子中,没有模型调用,唯一涉及到数据的地方是 message 参数。

你同样学习了 Yii 路由的相关内容,它是用户请求与控制器动作之间的桥梁。

在下一章节中,你将学习如何创建一个模型,以及添加一个包含 HTML 表单的页面。

 

 

以上是yii framework2.0 权威指南的教程内容,在按教程学习过程中遇到两个小问题

一是apache 服务器的根目录没有修改成yii2的basic/web时,按教程的url访问会报404错误,然后在修改apache的根目录后遇到了403错误,需要修改配置,在apache的httpd.conf文件中,有两个地方都要修改,也就是DocumentRoot属性和Directory要保持一致

DocumentRoot "path/to/basic/web"

<Directory "path/to/basic/web">

二是在actionSay这个方法中最终返回视图时,key的message首字母是小写,在视图中的Html::encode(Message)是大写,导致接受不到数据,所以,php一定要注意大小写,php一定要注意大小写php一定要注意大小写

转载于:https://my.oschina.net/jrfcc/blog/855240

Yii 2.0 权威指南 本教程的发布遵循 Yii 文档使用许可. 版权所有 2014 (c) Yii Software LLC. 介绍 已定稿 关于 Yii 已定稿 从 Yii 1.1 升级 入门 已定稿 安装 Yii 已定稿 运行应用 已定稿 第一次问候 已定稿 使用 Forms 已定稿 玩转 Databases 已定稿 用 Gii 生成代码 已定稿 更上一层楼 应用结构 已定稿 结构概述 已定稿 入口脚本 已定稿 应用 已定稿 应用组件 已定稿 控制器(Controller) 已定稿 视图(View) 已定稿 模型(Model) 已定稿 过滤器 已定稿 小部件(Widget) 已定稿 模块(Module) 已定稿 前端资源(Asset) 已定稿 扩展(extensions) 请求处理 已定稿 运行概述 已定稿 引导(Bootstrapping) 已定稿 路由(Route)引导与创建 URL 已定稿 请求(Request) 已定稿 响应(Response) 已定稿 Sessions(会话)和 Cookies 已定稿 错误处理 已定稿 日志 关键概念 已定稿 组件(Component) 已定稿 属性(Property) 已定稿 事件(Event) 已定稿 行为(Behavior) 已定稿 配置(Configurations) 已定稿 类自动加载(Autoloading) 已定稿 别名(Alias) 已定稿 服务定位器(Service Locator) 已定稿 依赖注入容器(DI Container) 配合数据库工作 编撰中 数据访问对象(DAO) - 数据库连接、基本查询、事务和模式操作 编撰中 查询生成器(Query Builder) - 使用简单抽象层查询数据库 编撰中 活动记录(Active Record) - 活动记录对象关系映射(ORM),检索和操作记录、定义关联关系 编撰中 数据库迁移(Migration) - 在团体开发中对你的数据库使用版本控制 待定中 Sphinx 待定中 Redis 待定中 MongoDB 待定中 ElasticSearch 接收用户数据 编撰中 创建表单 已定稿 输入验证 编撰中 文件上传 待定中 多模型同时输入 显示数据 编撰中 格式化输出数据 待定中 分页(Pagination) 待定中 排序(Sorting) 编撰中 数据提供器 编撰中 数据小部件 编撰中 主题 安全 编撰中 认证(Authentication) 编撰中 授权(Authorization) 编撰中 处理密码 待定中 客户端认证 待定中 安全领域的最佳实践 缓存 已定稿 概述 已定稿 数据缓存 已定稿 片段缓存 已定稿 分页缓存 已定稿 HTTP 缓存 RESTful Web 服务 已定稿 快速入门 已定稿 资源 已定稿 路由 已定稿 格式化响应 已定稿 授权验证 已定稿 速率限制 已定稿 版本化 已定稿 错误处理 已定稿 测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值