作者:白狼 出处:http://www.manks.top/document/yii_first_application.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统。出于实战基础加之自C语言的书籍出版以来,几乎所有的编程书籍都讲述了一个Hello World的例子作为开始。虽然我们仅仅是学习Yii2,但是好歹我们这也是高大上的Yii嘛,我们也尊重传统,来一段Hello World快速入门!
我将学会什么

  • 了解到MVC设计模式中的V和C是什么

  • 如何创建一个操作(action)

  • 如何创建对应的视图文件(模板)

  • 简单了解到操作的命名规范

  • 什么是路由

开始之前的准备
Yii是什么?为什么要学Yii呢?是啥,就是一个框架,如果要加一些形容词,我觉得高性能、易扩展等词最适合不过了。

MVC相信就不用多说了,Yii2无疑更好的基于MVC对代码进行了一定的组织。简洁优雅不说......我们还是不拍yii马屁了,说重点。

我们知道,客户端像服务端发起一个请求,服务端是必须要有对应的响应地址才是可以的。这个响应的地址在Yii2中又是怎么进行描述的呢?先来介绍下什么是操作。

操作,其实就是一个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指向frontendweb目录,我们后文所指的该域名均指向这里

地址栏输入 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层又是如何进行操作(此操作非彼操作,不要妄加揣摩)的呢?

<div class="test-index"> <h1>Hello World!</h1>
​​​​​​​</div>

说明一点:frontednviews下面创建的文件夹应与控制器保持一致,如此一来才方便我们对很多文件进行管理。

接下来看看如何才能对视图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跨站攻击。

下一节我们将要直接开讲简单的博客管理系统,本篇我们主要涉及的基本概念 操作、视图、路由等,希望你能掌握透彻,有任何问题下方均可留言交流!

[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]

查看原文

yii2实战教程之第一个Yii程序相关推荐

  1. JavaFx教程-02第一个javaFX程序

    本节,我将采用渐进的.循序渐进的方法来解释如何写出第一个JavaFX应用程序. 程序主框架 任何一个JavaFX应用程序的程序框架都如下所示: import javafx.application.Ap ...

  2. (重点)MySQL(入门篇22)JDBC下载和驱动教程 ,第一个JDBC程序,驱动步骤的解析。

    一.JDBC驱动教程 1. 下载JDBC jar 包 1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本 2.下载链接如下 https://dev. ...

  3. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  4. [No0000120]Python教程3/9-第一个Python程序

    现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用"复制"-"粘贴"把代码从页面粘贴到你 ...

  5. 指南-Luat二次开发教程指南-第一个Luat程序

    第一个Luat程序 目录名称 第一个Luat程序 第一个工程 安装编辑器 更改软件各项默认设置 推荐安装的拓展 新建工程 模块化编程 连接硬件 点亮LED小灯 让LED灯闪烁起来 第一个工程 本文将从 ...

  6. AUTOSAR实战教程 - 软件集成调试_程序跑飞一招解决

    工欲善其事必先利其器. AUTOSAR工程如此庞大的代码量,如果没有一个科学.程式化的方法来调试程序, 那么程序跑飞之后使用三板斧:打断点.看变量.对比正常代码和异常代码的变动,这显然是不能够胜任工作 ...

  7. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(第一个Python程序)

    从程序中了解知识点,有详细的备注 # 判断变量num是否为正数 # 注释语句 是对程序进行说明的语句,在程序运行过程中不被执行 # ctrl+/进行多行注释num=0 # 赋值语句 大小写敏感 可以以 ...

  8. RT-Thread Studio 项目实战教程 | 快速打造一个桌面mini网络时钟

    寻求更清爽的阅读体验,请移步:Mculover666的个人博客. 项目效果视频 花半小时打造的桌面mini网络时钟(自动网络对时.温度显示.湿度显示) 1. RT-Thread Studio RT-T ...

  9. PHP工程改成微擎的步骤_php微擎二次开发实战教程之今日头条小程序

    第一课(微擎介绍安装).mp4 95.1M 第五课(微擎模块工作流程解析).mp4 126.3M 第四十一课(小程序发布到官方应用市场).mp4 26.6M 第四十课(文章收藏).mp4 74.1M ...

最新文章

  1. wordpress android,WordPress for Android 2.0 试用记
  2. tomcat设置https访问
  3. 【STM32】typedef 类型及配合结构体使用
  4. 批量修改nginx配置文件
  5. NodeJS开发c++扩展模块
  6. SAP CRM 产品主数据和附件(Attachment)的模型关系
  7. kubernetes-dashboard(1.8.3)部署与踩坑
  8. js在一个指定元素前添加内容_WebAR开发指南(1)---使用AR.js实现第一个WebAR demo...
  9. Java项目经验是程序员成长的重要经验
  10. JAVA只要掌握内部类,多继承和单继承都不是问题
  11. Linux字符模式下如何设置/删除环境变量
  12. 例解List<Map<String, Object>>存放的对象问题
  13. 单片机如何实现单片机+蓝牙模块或手机蓝牙模块,手机上应用程序 ?
  14. 【VRP】基于matlab遗传算法求解多中心的车辆路径规划问题【含Matlab源码 010期】
  15. 浅谈BCD码同二进制转换
  16. 马哥linux docker视频,[其他] 马哥Docker + K8S 视频教程
  17. Java项目:ssm学生学籍管理系统
  18. (保姆级)国内1块钱注册火爆全网的OpenAI-ChatGPT机器人
  19. windows如何调出不见的语言栏
  20. 谷歌最新版本浏览器安装海康插件后仍不能预览摄像头视频的解决方法

热门文章

  1. layui动态添加input_layer.prompt添加多个输入框
  2. 正则表达式的深入理解
  3. GridSearchCV与RandomizedSearchCV
  4. matlab实现粗糙表面_基于分形理论的球头铣削表面形貌研究
  5. qt连接错误ip的sqlserver超时时间_参数设置导致请求超时案例
  6. c语言,c++求最大公因数与最小公倍数方法集合
  7. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库
  8. java实现二进制转十六进制
  9. elon函数_Neuroink Elon麝香制造中的灾难
  10. Java代码注释规约