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

PHP开发框架YiiFramework教程(2)YiiWeb应用基础

只有先了解Yii应用的主要组成部分和每个类包支持的主要功能,才能后续比较灵活的使用Yii来开发Web应用

有了前面的“Hello,World”, Yii应用开发似乎很容易,别这么快下结论:-),想起多年以前刚开始使用MFC开发时,写完 第一个Hello,World之后,还是觉得无从下手,不知道怎么开始写MFC应用,这是因为MFC提供了大量的类库,如果对MFC应用程 序框架和其提供的主要类库不事先了解的话,基本上就没办法写应用,学习Yii Framework,也要先了解一下组成Yii应用的几个 主要组成部分也一些常用的类。

在前面教程说过Yii采用MVC(模型-视图-控制器),并介绍了入口脚本和主应用程序类 CWebApplication类。应用类的实例由 入口脚本 创建为一个对象(Singleton)。这个应用单例对象可以在任何地方通过 Yii::app() 访问。

主应用实例(CWebApplication)

默认情况下,应用是一个 CWebApplication 的实例。要自 定义它,我们通常需要提供一个配置文件 (或数组) 以创建应用实例时初始化其属性值。自定义应用的另一种方式是继承 CWebApplication。

配置是一个键值对数组。每个键代表应用实例中某属性的名字,每个值即相应属性的初始值。 例如 ,如下的配置设定了应用的 name 和 defaultController 属性。

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)我们通常在一个单独的PHP 脚本(e.g.protected/config/main.php)中保存这些配置。在脚本中, 我们通过以下方 式返回此配置数组:

return array(...);要应用此配置,我们将配置文件的名字作为参数传递给应用的构造 器,或像下面这样传递到Yii::createWebApplication() 。这通常在 入口脚本 中完成:

$app=Yii::createWebApplication($configFile);应用组件

应用的功能可以通过其灵活的组件结构 轻易地自定义或增强。应用管理了一系列应用组件,每个组件实现一特定功能。 例如,应用通过 CUrlManager 和 CHttpRequest 的帮助解析来自用户的请求。

通过配置应用的 components 属性, 我们可以自定义应用中用到的任何组 件类及其属性值。例如,我们可以配置应用的 CMemCache 组件, 这样它就可以使用多个 memcache 服务器实现缓存:

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
)如上所示,我们在 components 数组中添加了 cache 元素。cache 元素表明此组件的类是 CMemCache, 他的servers 属性应依此初始化。

要访问一个应用组件,使用 Yii::app()->ComponentID ,其中的 ComponentID 是指组件的ID( 例如Yii::app()->cache)。

应用的组件可以通过在其配置中设置 enabled 为 false 禁用。当我们访问被禁用的组 件时将返回 Null。

CWebApplication的的生命周期

当处理用户请求时,应用将经历如下声明周期:

通过 CApplication::preinit() 预初始化应用;

设置类的自动装载器和错误处理;

注册核心类组件;

加载应用配置;

通过 CApplication::init() 初始化应用:

注册应用行为;

载入静态应用组件;

触发 onBeginRequest 事件;

处理用户请求:

解析用户请求;

创建控制器;

运行控制器;

触发 onEndRequest 事件。

CController控制类

控制器 是 CController 或其子类的实例。它在当用户请求时由应用创建。 当一个控制器运行 时,它执行所请求的动作,动作通常会引入所必要的模型并渲染相应的视图。 动作 的最简形式,就是一个名字以 action 开头 的控制器类方法。

控制器通常有一个默认的动作。当用户的请求未指定要执行的动作时,默认动作将被执行。 默认情况 下,默认的动作名为index。它可以通过设置 CController::defaultAction 修改。

如下是一个控制器类所需的最简代码 。由于此控制器未定义任何动作,对它的请求将抛出一个异常。

class SiteController extends CController
{
}

路由

用户访问网页的URL的基本格式为 /index.php?r=XController/YAction , 对应到代码为 protected目录 下controllers子目录下的XController.php 中定义的的类XController的YAction 方法。 例如,路由 post/edit 代表 PostController 及其 edit 动作。默认情况下,URL http://hostname/index.php?r=post/edit 即请求此控制器和动作。 模型 (CModel类) 模型是 CModel 或其子类的实例。模型用于保持数据以及与其相关的业务逻辑.

Yii 实现了两种类型的模 型:表单模型和 Active Record。二者均继承于相同的基类 CModel。

表单模型是 CFormModel 的实例。表单模型用于保 持从用户的输入获取的数据。 这些数据经常被获取,使用,然后丢弃。例如,在一个登录页面中, 我们可以使用表单模型用于 表示由最终用户提供的用户名和密码信息。更多详情,请参考 使用表单。

Active Record (AR) 是一种用于通过面向对 象的风格抽象化数据库访问的设计模式。 每个 AR 对象是一个CActiveRecord 或其子类的实例。代表数据表中的一行。 行中的 字段对应 AR 对象中的属性。

视图View

视图是一个包含了主要的用户交互元素的PHP脚本.他可以包含PHP语句,但 是我们建议这些语句不要去改变数据模型,且最好能够保持其单纯性(单纯作为视图)。为了实现逻辑和界面分离,大段的逻辑应该 被放置于控制器或模型中,而不是视图中。

和Windows应用类比的话,View类似于Windows应用的Form类,其中使用可以控 件来定义UI,控件对应到Yii框架成为CWidget,它是一个主要用于表现数据的组件.小物件通常内嵌于一个视图来产生一些复杂 而独立的用户界面.例如,一个日历小物件可用于渲染一个复杂的日历界面.小物件使用户界面更加可复用.

和Asp.Net类似 的Masterpage,Yii中称为Layout(布局)。

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

......header here......

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

当使用 render() 时,布局被隐式 应用.视图脚本 protected/views/layouts/main.php 是默认的布局文件.这可以通过改变 CWebApplication::layout 或者 CWebApplication::layout 进行自定义。要渲染一个不带布局的视图,则需调用 renderPartial() 。

以上介绍了Yii应 用的几个重要的组成部分,可以参考“Hello,World”示例,并且Yii应用的文件结构也有缺省的定义,下面为应用的缺省目录结 构:

PHP开发框架Yii Framework教程(2) Yii Web应用基础

PHP开发框架Yii Framework教程(2) Yii Web应用基础

PHP开发框架Yii Framework教程(2) Yii Web应用基础

 

在正式开发Yii应用前, 先粗略看一下Yii提供的类库 http://www.yiiframework.com/doc/api/ ,下图列出来Yii Framework提供的类库的包定义:

PHP开发框架Yii Framework教程(2) Yii Web应用基础

只有先 了解Yii应用的主要组成部分和每个类包支持的主要功能,才能后续比较灵活的使用Yii来开发Web应用。



推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
寂寞-无解
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有