热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP开发框架YiiFramework教程(1)第一个应用HelloWorld

YiiFramework教程可以参见官方中文文档,那么为什么还要写这个开发教程呢?本教程目的是通过不同的视角(主要是通过开发Windows应用C++,C#程序员的角度)帮助Windows桌面应用或ASP.Net程序员较快的掌握PHPYiiFramework应用程序框架。使用PHP开发Web应用的一个

Yii Framework 教程可以参见官方中文文档 ,那么为什么还要写这个开发教程呢? 本教程目的是通过不同的视角(主要是 通过开发Windows应用C++,C#程序员的角度)帮助Windows 桌面应用或ASP.Net程序员较快的掌握PHP Yii Framework应用程序框 架。 使用PHP开发Web应用的一个重要好处是可以应用于各种操作系统(Unix,Windows,Mac OS),而不像Asp.Net一般只能应 用中Windows操作系统上。使用PHP+Apache+MySQL (XMAP/LAMP) 几乎可以打遍天下无敌手:-)。

本教程所使用的操作系统为Windows,开发IDE为 VS.PHP,之所以使用这个开发环境是因为VS.PHP采用Visual Studio 作为 IDE ,对于Visual Studio开发人员比较熟悉。而且可以用来同时开发调试C#,PHP应用。 Yii Framework 本身和IDE无关,你可以 使用你喜欢的PHP开发工具来开发Yii 应用(比如Eclipse)。关于VS.PHP的介绍可以参见 VS.PHP + YiiFramework 组合开发PHP 应用。本教程关于Yii Framework知识也和开发IDE无关,可以应用到各种开发环境,你可以选择你自己喜欢的开发环境。

在创建第一个应用之间,需要下载Yii 开发包,下载可以到Yii网站http://www.yiiframework.com/download/ 下载,目前版 本为1.1.12, 下载后直接解压,为方便起见将其解压到C:根目录下:

PHP开发框架Yii Framework教程(1) 第一个应用Hello World

使用VS.PHP的还有一 个好处是其自带了Apache Web 服务器,因此无需另外安装,你也可以安装XAMP (Apache+MySQL+PHP) ,但如需要使用MySQL,则 另外需安装MySQL.

安装好Yii Framework之后,我们就使用VS.PHP来创建第一个PHP应用,Hello World。

PHP开发框架Yii Framework教程(1) 第一个应用Hello World

 

VS.PHP 创建HelloWorld项目,并添加一个index.php 文件。

此时修改index.php 为

print "Hello, World!";    
        
?>按F5运行程序,VS.PHP打开确省浏览器,显示“Hello,World!”. 但这不是一个Yii应用!!!,我们还没有 使用Yii Web应用程序框架,Yii Framework是一个纯面向对象的应用程序框架。其Web程序的Application类为CWebApplication 类。并采用了MVC模型。

面的示意图展示了 Yii 应用的静态结构

PHP开发框架Yii Framework教程(1) 第一个应用Hello World

下图展示了一个 Yii 应用在处理用户请求时典型的工作流

PHP开发框架Yii Framework教程(1) 第一个应用Hello World

用户发出了访问 URL http://www.example.com/index.php?r=post/show&id=1 的请求, Web 服务器通过执行入口脚本 index.php 处理此请求。

入口脚本创建了一个 应用 实例并执行。

应用从一个叫做 request 的 应用组件 中获得了用户请求的详细信息。

应用在一个名叫 urlManager 的应用组件的帮助下,决定请求的 控制器 和 动作 。在这个例子中,控制器是 post,它代表 PostController 类; 动作是 show ,其实际含义由控制器决定。

应用创建了一个所请求控制器的实例以进一步处理用户请求。控制器决定了动作 show 指向控制器类中的一个名为 actionShow 的方法。然后它创建并持行了与动作关联的过滤器(例如访问控制,基准测试)。 如果过滤器允许,动作将被执行 。

动作从数据库中读取一个 ID 为 1 的 Post 模型。

动作通过 Post 模型渲染一个名为 show 的 视图。

视图读取并显示 Post 模型的属性。

视图执行一些 小物件。

视图的渲染结果被插入一个 布局。

动作完成视图渲染并将其呈现给用户。

Yii应用本身有很多配置,比如确省的Controller ,action是否使用Log文件等。对于Hello,World这个简单的应用,就全部使 用缺省值。缺省的Controller为SiteController, Action为indexAction.  也就是说,比如你的网站为www。guidebee.com  ,如果你采用Yii Framework, 用户请求www。guidebee.com时,Yii 应用的CWebApplication 将创建类SiteController的 实例并调用SiteController的indexAction方法,(相当于C# Console应用的Program 的main方法)。

Yii 项目使用不同 的目录来存放Controller,Action,View,Layout等,其缺省目录结构如下

testdrive/
   index.php                 Web 应用入口脚本文件
   index-test.php            功能测试使用的入口脚本文件
   assets/                   包含公开的资源文件
   css/                      包含 CSS 文件
   images/                   包含图片文件
   themes/                   包含应用主题
   protected/                包含受保护的应用文件
      yiic                   yiic 命令行脚本
      yiic.bat               Windows 下的 yiic 命令行脚本
      yiic.php               yiic 命令行 PHP 脚本
      commands/              包含自定义的 'yiic' 命令
         shell/              包含自定义的 'yiic shell' 命令
      components/            包含可重用的用户组件
         Controller.php      所有控制器类的基础类
         Identity.php        用来认证的 'Identity' 类
      config/                包含配置文件
         console.php         控制台应用配置
         main.php            Web 应用配置
         test.php            功能测试使用的配置
      controllers/           包含控制器的类文件
         SiteController.php  默认控制器的类文件
      data/                  包含示例数据库
         schema.mysql.sql    示例 MySQL 数据库
         schema.sqlite.sql   示例 SQLite 数据库
         testdrive.db        示例 SQLite 数据库文件
      extensions/            包含第三方扩展
      messages/              包含翻译过的消息
      models/                包含模型的类文件
         LoginForm.php       'login' 动作的表单模型
         ContactForm.php     'contact' 动作的表单模型
      runtime/               包含临时生成的文件
      tests/                 包含测试脚本
      views/                 包含控制器的视图和布局文件
         layouts/            包含布局视图文件
            main.php         所有视图的默认布局
            column1.php      使用单列页面使用的布局
            column2.php      使用双列的页面使用的布局
         site/               包含 'site' 控制器的视图文件
            pages/           包含 "静态" 页面
               about.php     "about" 页面的视图
            contact.php      'contact' 动作的视图
            error.php        'error' 动作的视图(显示外部错误)
            index.php        'index' 动作的视图
            login.php        'login' 动作的视图
         system/             包含系统视图文件

这个目录结构可以通过Yii自带的工具来创建 缺省的文件建立第一 个 Yii 应用。

对于Hello World项目来说,没有必要这么复杂,我们只需创建 protected \controllers 目录以存放 SiteController.php。

每个Yii应用都有的入口脚本,可以理解为C#的Program类。这个 入口脚本大同小异

        
// 包含Yii引导文件    
//require_once(dirname(__FILE__).'/../../framework/yii.php');    
$yii='C:/yiiframework/yii.php';    
// 发布应用时,去掉下面代码避免产生调试信息    
defined('YII_DEBUG') or define('YII_DEBUG',true);    
        
require_once($yii);    
// 创建一个应用实例并执行    
        
Yii::createWebApplication()->run();前面说过Yii的缺省Controller为SiteController,缺省Action为 actionIndex, 因此HelloWorld的SiteController代码如下

/**   
 * SiteController is the default controller to handle user requests.   
 */
class SiteController extends CController    
{    
    /**   
     * Index action is the default action in a controller.   
     */
    public function actionIndex()    
    {    
        echo 'Hello World';    
    }    
}此时再运行应用,可以在浏览器中显示“Hello,World”。 目前没有使用MVC模型直接在Controller 使用echo 打印 出“Hello,World”, 下面稍微修改一下代码,创建一个简单的View。

View缺省目录为protected 目录下的views 子目 录,和Controller类对于,比如SiteController对应到Views目录下的site子目录,和Asp.Net一样,Yii的View(对应到Asp.Net 的Page类)也可以使用MasterPage,Yii应用成为Layout,缺省Layout存放在views的layouts 子目录。

PHP开发框架Yii Framework教程(1) 第一个应用Hello World

修改SiteController 的actionIndex 方法,改为:

public function actionIndex()    
{    
 $this->render("index");    
}View 视图是一个包含了主要的用户交互元素的PHP脚本.他可以包含PHP语句,但是我们建议这些语句不要去改变数据 模型,且最好能够保持其单纯性(单纯作为视图)。为了实现逻辑和界面分离,大段的逻辑应该被放置于控制器或模型中,而不是视 图中,视图有一个名字,当渲染(render)时,名字会被用于识别视图脚本文件。

actionIndex 通过render 方法来显示一 个View,对应到views->site 目录下的 index.php 。render 缺省使用views ->layouts 下的 main.php 作为 Layout ( 布局,MasterPage)

布局是一种用来修饰视图的特殊的视图文件.它通常包含了用户界面中通用的一部分视图.例如:布局 可以包含header和footer的部分,然后把内容嵌入其间.

......header here............footer here......

其中的 $content 则储存了内容视图的渲染结果.

来看一下View是目录下的 index.php (View) 代码:

这样就完成了Hello,World的MVC模型, 运行显示“Hello,World”。

PHP开发框架Yii Framework教程(1) 第一个应用Hello World


-


推荐阅读
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
author-avatar
h38868863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有