0

0

yii2实战教程之第一个Yii程序

php中文网

php中文网

发布时间:2016-05-30 16:59:43

|

1265人浏览过

|

来源于php中文网

原创

之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统。出于实战基础加之自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。

<span style="color: #000000;">namespace frontend\controllers; 
</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> yii\web\Controller; 
</span><span style="color: #0000ff;">class</span> TestController <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Controller 
{ 
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> actionIndex () { 
    } 
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> actionCreate () { 
    } 
} </span>

 

ShopEx助理
ShopEx助理

一个类似淘宝助理、ebay助理的客户端程序,用来方便的在本地处理商店数据,并能够在本地商店、网上商店和第三方平台之间实现数据上传下载功能的工具。功能说明如下:1.连接本地商店:您可以使用ShopEx助理连接一个本地安装的商店系统,这样就可以使用助理对本地商店的商品数据进行编辑等操作,并且数据也将存放在本地商店数据库中。默认是选择“本地未安装商店”,本地还未安

下载

有同学要较真了,控制器不是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。艾玛,可把我憋坏了。

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> actionIndex () { 
    </span><span style="color: #0000ff;">echo</span> "Hello World!"<span style="color: #000000;">; 
}</span>

 

现在在回过来看看,是不是很简单!

我们改变点什么,看看如何动态的输出Hello Ketty,Hello Anmy?

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> actionIndex (<span style="color: #800080;">$name</span><span style="color: #000000;">) { 
    </span><span style="color: #0000ff;">echo</span> "Hello {<span style="color: #800080;">$name</span>}!"<span style="color: #000000;">; 
}</span>

 

该操作方法接收一个参数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 <span style="color: #0000ff;">class</span>="test-index"> 
    <h1>Hello World!</h1> 
</div>

 

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

接下来看看如何才能对视图index.php进行操作?

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> actionIndex (<span style="color: #800080;">$name</span><span style="color: #000000;">) { 
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> echo "Hello {$name}!"; </span>
    <span style="color: #0000ff;">return</span> <span style="color: #800080;">$this</span>->render('index'<span style="color: #000000;">); 
}</span>

 

仅仅是在之前的操作index内写了一行代码,用于操作视图文件。此时我们很有必要在视图文件内动态输出Hello xxx!这个时候只需要在render方法传递参数即可。

<span style="color: #008000;">//</span><span style="color: #008000;"> controller </span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> actionIndex (<span style="color: #800080;">$name</span><span style="color: #000000;">) { 
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> echo "Hello {$name}!"; </span>
    <span style="color: #0000ff;">return</span> <span style="color: #800080;">$this</span>->render('index',<span style="color: #000000;"> [ 
        </span>'name' => <span style="color: #800080;">$name</span>,<span style="color: #000000;"> 
    ]); 
} 


</span><span style="color: #008000;">//</span><span style="color: #008000;">view </span>
<div <span style="color: #0000ff;">class</span>="test-index"> 
    <h1>Hello <?= <span style="color: #800080;">$name</span> ?>!</h1> 
</div> 

 

如此一来,我们既掌握了视图,又实现了我们想要输出的Hello xxx!

但是,这个时候,如果我们地址栏输入的参数name值等于,我们想要的结果是Hello !实际上并非如此!如此一来,就难免会遭遇XSS攻击!为了安全起见,页面上输出的信息我们很有必要安全地处理一下!

<div <span style="color: #0000ff;">class</span>="test-index"> 
    <h1>Hello <?= yii\helpers\Html::encode(<span style="color: #800080;">$name</span>) ?>!</h1> 
</div>

 

实际上这里我们也仅仅是简单的谈了一下如何避免XSS跨站攻击。

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

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

查看原文

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号