入口文件
YII框架入口文件有两个,一个是 web application的入口文件,一个是console application的入口文件。
Web application的入口文件是 index.php,用户通过url访问后台的时候的入口文件。
Console application的入口文件是 yii(是php文件), 这个文件是通过yii.bat启动的时候调用的。
如果YII框架安装成功之后的话,那么我们访问YII框架的URL为(以我的环境为准):
http://localhost/DemoPage/Yii/basic/web/index.php
这个index.php 文件就是入口文件。在这个index.php 中加载了环境所有需要的文件,并且启动整个框架。
接下来我们要做一个简单的Hello World程序,
-
创建一个Action
-
Action简单定义
- Action定义于Controller之中。
- Action对应着一个方法
- Action是直接处理用户请求的逻辑的地方
-
为了简单,可以直接在框架里面已经存在的SiteController里面定义。
该方法接受一个参数message,如果message为空,默认为"Hello World"。 最后,会返回给用户一个say视图,并且会把参数也传递过去。(注意方法命名,YII通过action前缀区分action方法和普通方法。这个是一种约定。然后action后缀后面的部分,作为我们的具体的action名字)
-
-
创建一个View
- 每个Controller对应着一个view目录。比如我们使用的这个框架自带的SiteController,在views目录中有个site目录。里面存放着对应的view。
-
我们需要在views/site/目录中创建一个say.php. view文件的命名需要和action中的render方法传递的say参数对应。里面的内容如下:
该view将会展示传递过来的message信息。注意这里使用encode方法,是因为这个参数是从用户那边传递过来的。如果直接展示容易受到跨站攻击。比如用户在传递过来的参数中植入恶意的JavaScript代码。通过这个encode方法编码之后,可以有效地防止这个问题。
-
访问Action和View
-
在index.php 后面加上路由和参数信息,见下面:
-
页面结果如下:
有个很有趣的现象,View自动继承了yii框架的页面结构。请看页头~
这个是通过什么方式得到的呢?
下面是官网的解释:
Thenew page shares the same header and footer as other pages because the render() methodwill automatically embed the result of the say viewin a so-called layoutwhich inthis case is located at views/layouts/main.php.
其实在render方法中,会自动把我们返回的结果嵌入到下面的文中:views/layouts/main.php, 然后作为一个整体,返回给用户。
我们也可以为自己的项目创建自己的的main.php,替换掉默认的就可以了。
-
-
关于跨站攻击
-
如果我们在URL中传递参数,message=<script type="text/javascript">alert(1);</script>,请看结果:
是直接把值给展示出来了。那如果不是用encode方法的话,结果呢?
备注:Google浏览器貌似可以自动屏蔽跨站攻击,所以我使用了IE浏览器测试。
可以看出encode方法的重要性了吧。
-