yii2实战教程之第一个Yii程序
之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统。出于实战基础加之自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指向\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跨站攻击。
下一节我们将要直接开讲简单的博客管理系统,本篇我们主要涉及的基本概念 操作、视图、路由等,希望你能掌握透彻,有任何问题下方均可留言交流!
[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]
yii2实战教程之第一个Yii程序的更多相关文章
- [No0000120]Python教程3/9-第一个Python程序
现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- yii2 实战教程之如何安装
作者:白狼 出处:http://www.manks.top/document/install.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- Sprite Kit教程:制作一个通用程序 2
注1:本文译自Sprite Kit Tutorial: Making a Universal App: Part 2 目录 动画的定义:可行性 属性列表 添加游戏逻辑 添加音效 何去何从 上一篇文章中 ...
- 学习廖雪峰的Python教程之第一个Python程序
一.命令行模式和Python交互模式的区分 命令行模式: Python交互模式 二.文本编辑器 1.绝对不能用Word和Windows自带的记事本.Word保存的不是纯文本文件,而记事本会自作聪明地在 ...
- 2、MyBatis教程之第一个MyBatis程序
3.MyBatis第一个程序 1.搭建实验数据库 CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CREA ...
- 零基础入门 实战mpvue2.0多端小程序框架
第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟 ...
- 微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具
iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...
- 缓冲区溢出实战教程系列(三):利用OllyDbg了解程序运行机制
想要进行缓冲区溢出的分析与利用,当然就要懂得程序运行的机制.今天我们就用动态分析神器ollydbg来了解一下在windows下程序是如何运行的. 戳这里看之前发布的文章: 缓冲区溢出实战教程系列(一) ...
随机推荐
- MyCAT实现MySQL的读写分离
在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修 ...
- android studio 导入有so 文件的项目是,程序崩溃的可能原因
被这玩意坑了2个多小时. ----------------------------------- 由于 android studio 在建项目时,不会自动识别 so 文件,所以在含有so 文件的项目中 ...
- “英雄之旅”见闻和小结----angular2系列(三)
前言: 本系列在前面两篇文章,介绍了Zone.js和angular2的基础概念.而后对于ng2的学习,还是由官方的 Tour of Heroes 开始. 以下内容经过提炼和个人理解,当然也会有不正确的 ...
- OpenFlow消息
☞Openflow消息总共分为三大类: 1.Controller‐to‐Switch 控制器至交换机消息此类消息由控制器主动发出 Features 用来获取交换机特性 Con ...
- linux源码分析(三)-start_kernel
前置:这里使用的linux版本是4.8,x86体系. start_kernel是过了引导阶段,进入到了内核启动阶段的入口.函数在init/main.c中. set_task_stack_end_mag ...
- 微博关注/QQ信息发送
<!doctype html> <html lang="en" xmlns:wb=“http://open.weibo.com/wb”> <head& ...
- 7.9 数据注解特性--ForeignKey
外键特性,可以应用到类的属性中.Code-First默认的约定,对外键属性来说,假定外键属性的名称和主键属性是匹配的. 我们看一下,下面的代码: using System; using System. ...
- .NET设计模式(1):1.1 单例模式(Singleton Pattern)
概述 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单 ...
- jQuery简洁大方的登录页面模板
jQuery+CSS网站登录模板本模板带验证码 在线体验:http://hovertree.com/texiao/jquery/13.htm Demo 2:http://hovertree.com/h ...
- 【Win10开发】响应式布局——AdaptiveTrigger
接触过Windows10的童鞋已经知道Universal app不仅可以运行在pc上,还可以运行在mobile或者其他平台上.那么这样势必会带来一个问题,如何针对不同屏幕来进行布局适配.所以微软提供了 ...