做者:白狼 出处:http://www.manks.top/document/yii_first_application.html 本文版权归做者,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。php
以前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统。出于实战基础加之自C语言的书籍出版以来,几乎全部的编程书籍都讲述了一个Hello World的例子做为开始。虽然咱们仅仅是学习Yii2,可是好歹咱们这也是高大上的Yii嘛,咱们也尊重传统,来一段Hello World快速入门!
我将学会什么html
了解到MVC设计模式中的V和C是什么web
如何建立一个操做(action)编程
如何建立对应的视图文件(模板)设计模式
简单了解到操做的命名规范安全
什么是路由yii2
开始以前的准备
Yii是什么?为何要学Yii呢?是啥,就是一个框架,若是要加一些形容词,我以为高性能、易扩展等词最适合不过了。app
MVC相信就不用多说了,Yii2无疑更好的基于MVC对代码进行了必定的组织。简洁优雅不说......咱们仍是不拍yii马屁了,说重点。框架
咱们知道,客户端像服务端发起一个请求,服务端是必需要有对应的响应地址才是能够的。这个响应的地址在Yii2中又是怎么进行描述的呢?先来介绍下什么是操做。frontend
操做,其实就是一个action(action是动做的意思),也能够描述为咱们前面说的响应地址。TA是控制器(controller)的组成部分,再说白了其实就是类(class)的操做方法(function)。
如何建立一个操做呢?给类建立一个方法你会不,非要说的那么白才明白不是太好,对吧。
也就是说咱们须要先有一个类(控制器)呗,没错!以下示例就是包含了两个操做 index 和create的控制器test。
namespace frontend\controllers; use yii\web\Controller; class TestController extends Controller { public function actionIndex () { } public function actionCreate () { } }
有同窗要较真了,控制器不是test吗,为啥你的是TestController?还有啊,说好的操做名是index和create为啥你的都有前缀action?controller跟action去掉可不能够?答:不能够,必须带上!Yii2规定:声明的控制器必须带上Controller后缀,同时操做必须带上前缀action!
一般状况下,控制器用来处理请求有关的资源类型,其实就是作一些操做的,好比咱们要处理文章之类的数据,控制器应命名为Article恰当些,尽可能作到见名知意。Action固然也是如此,好比咱们要建立一篇文章,action理应为add或者create为妙。
那有同窗要说了,我就想叫操做名为createArticle怎么办?天儿热,先凉拌着,慢慢说。
yii2中操做名(action)遵循驼峰式命名,也就是说若是你是多个单词,请保证你的命名规则是actionCreateArticle而不是actionCreatearticle!固然,这只是一种规范,你不这样作也没人拦你。须要提醒注意的是多个单词驼峰式命名,访问操做的时候,多个单词须要像create-article这样用链接符链接而不是createArticle哦
接下来咱们访问已经建立好的操做:
首先咱们先配置下域名advanced.dev指向\frontend\web目录,咱们后文所指的该域名均指向这里
在frontend\controllers\目录下新建TestController.php文件,内容参考上面咱们建立Test控制器的代码
地址栏输入 http://advanced.dev/index.php?r=test/index 访问看看结果,咱们会发现一片空白,什么也没有!很明显,咱们的的操做方法index里空空如也,没作任何输出。要不咱们作点什么?别急,咱们先来看看这个地址,TA究竟作了什么,为何能请求到咱们指定的操做。
这就须要咱们引入一个新的概念-路由。感受挺好哈,这名字都没听过。不过没关系,我换个说法你就明白了,访问地址,路由就是咱们的访问地址!明白了吧,TA就是用于定位控制器操做的地址!咱们这里重点是讲明白概念,不作深究,具体细节须要的能够去查看官方文档。
输出Hello World!
该明白的该说的都说了,饶了一大圈终于该说本篇文章的重点了-输出Hello World。艾玛,可把我憋坏了。
public function actionIndex () { echo "Hello World!"; }
如今在回过来看看,是否是很简单!
咱们改变点什么,看看如何动态的输出Hello Ketty,Hello Anmy?
public function actionIndex ($name) { echo "Hello {$name}!"; }
该操做方法接收一个参数name,理应程序上会输出Hello, xxx的字样。
如今咱们依然访问 http://advanced.dev/index.php?r=test/index 会发现页面报错了,提示错误缺乏参数:name!也就是说,咱们访问该操做时应该传进来一个参数name!咱们把地址修改成 http://advanced.dev/index.php?r=test/index&name=Kitty ,这个时候页面正常输出了Hello Kitty!手动修改地址栏的name值,页面上输出的内容也会随之进行改变!
咱们知道,操做其实就相似MVC中的C层,C层也就是处理业务逻辑的一层,如此一来,像上面在控制器的操做方法中输出内容明显就不太合适了。
既然要输出内容,咱们看看Yii2的V层又是如何进行操做(此操做非彼操做,不要妄加揣摩)的呢?
咱们引入新的概念-视图。视图是啥?说白了就是咱们的模版文件。咱们先在frontend\views\新建文件夹test,而后在test下建立一个视图文件index.php,文件内容以下
<div class="test-index"> <h1>Hello World!</h1> </div>
说明一点:frontedn\views下面建立的文件夹应与控制器保持一致,如此一来才方便咱们对不少文件进行管理。
接下来看看如何才能对视图index.php进行操做?
public function actionIndex ($name) { // echo "Hello {$name}!"; return $this->render('index'); }
仅仅是在以前的操做index内写了一行代码,用于操做视图文件。此时咱们颇有必要在视图文件内动态输出Hello xxx!这个时候只须要在render方法传递参数便可。
// controller public function actionIndex ($name) { // echo "Hello {$name}!"; return $this->render('index', [ 'name' => $name, ]); } //view <div class="test-index"> <h1>Hello <?= $name ?>!</h1> </div>
如此一来,咱们既掌握了视图,又实现了咱们想要输出的Hello xxx!
可是,这个时候,若是咱们地址栏输入的参数name值等于,咱们想要的结果是Hello !实际上并不是如此!如此一来,就不免会遭遇XSS攻击!为了安全起见,页面上输出的信息咱们颇有必要安全地处理一下!
<div class="test-index"> <h1>Hello <?= yii\helpers\Html::encode($name) ?>!</h1> </div>
实际上这里咱们也仅仅是简单的谈了一下如何避免XSS跨站攻击。
下一节咱们将要直接开讲简单的博客管理系统,本篇咱们主要涉及的基本概念 操做、视图、路由等,但愿你能掌握透彻,有任何问题下方都可留言交流!
[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原做者更但愿看客们查看原文,以防有任何问题不能更新全部文章,避免误导!]