zend framework实例化教程
Zend Framework使用实例
Zend Framework使用实例一、Zend Framework简介Zend Framework使用模型-视图-控制器(Model-View-Controller(MVC))架构。
这个用来把你的程序分离成不同部分使得开发和维护变得容易。
运行Zend Framework需要:PHP 5.1.4 (或更高) 、Web 服务器支持mod_rewrite功能,本实例采用Apache。
从这里/download 下载Zend Framework,有两种格式.zip或者.tar.gz。
二、Zend Framework的配置1、目录结构虽然Zend Framework 没有强求使用一个标准的目录结构,但是还是有一些通用的目录结构。
这个目录结构假设你完全控制Apache 的配置。
(下面以本机做例子,各位需根据自己的情况进行更改,我的服务器的根目录指向的是Web 文件夹)Web/test//webapp/controllers/models/templates/templates_c/library/webroot/images/js/css我们已经把程序中的模型、视图和控制器的文件分离到不同的子目录中。
支持的图像,脚本和CSS 文件被存放在webroot 目录下的不同子目录中。
下载的Zend Framework 文件放在library 目录下。
如果我们还需要其他库文件,都可以放在这里。
在这个实例中,我们使用到了Smarty模版技术,所以Smarty 的库文件我们也应该放在library文件下!2、启动文件1) 配置.htaccess我们使用单一的入口文件index.php来对我们的程序进行访问,这给我们提供了程序中所有页面的中心点并确保运行环境配置正确。
我们用.htaccess 文件来实现这个目的,添加.htaccess 文件在test 的根目录中,内容如下:RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php2)配置Apache与此同时,我们还需要对apache进行一些设置,打开apache的配置文件httpd.conf。
ZendFramework入门教程
ZendFramework⼊门教程⼀、Zend Framework简介1. 什么是ZendFrameworkZend Framework(ZF or ZFW)是PHP的母公司Zend公司开发的⼀套PHP开发框架技术,它提供了⼀个优秀的、简单的综合开发环境,提供了很多可⽤的解决⽅案,可以⽤来建⽴⼀个稳定的、可升级的的Web应⽤。
所谓框架,是整个或者部分系统的可重⽤设计,它⾸先要提供⼀个可复⽤的应⽤参考架构,阐明整个设计、组件之间的依赖关系、责任分配和控制流程,也包含⼀些设计规范等等。
它提供了对⼀些通⽤问题的解决⽅案。
另外Zend Framework采⽤常见的MVC模型(在后续具体介绍),这样可以⽐较⽅便的达到关注点分离的⽬的,可以⽐较⽅便的建⽴基于MVC 架构的Web应⽤(典型的MVC Web架构还有Struct等等,它们原理都很类似)(PHP的类似框架还有很多如:yaf)2. 什么是LAMPLAMP是Linux+Apache+Mysql+Perl/PHP/Python的缩写,它们是⼀组经常⽤来搭建动态⽹站或者服务器的开源软件,本⾝都是各⾃独⽴的程序,但是因为常被放在⼀起使⽤,拥有了越来越⾼的兼容度,共同组成了⼀个强⼤的Web应⽤程序平台,由于都是开源软件,除了免费使⽤的诱惑,还有可以修改源码、⾃⼰进⾏控制等优点,LAMP是⼤多数⽹站开发者和很多⼤公司(如:Facebook和Baidu)的不⼆选择。
从⽹站的流量上来说,70%以上的访问流量是LAMP来提供的,可见LAMP是最强⼤的⽹站解决⽅案.(其它类似的⽅案如MS的.NET框架和Oracle的J2EE框架,三者同样强⼤)为什么要说LAMP呢,因为这些软件的组合强⼤到只要提到⼀个就必须要提到另外三个的地步,⽽在实验室⽹站的建设中,我们使⽤PHP,我们采取的当然也是LAMP的框架3. Zend Framework的安装XAMPP:Apache FriendsZend安装和使⽤另外需要注意的是,默认的Zend Framework使⽤MVC机制,它采⽤rewrite的⽅式进⾏跳转,这就需要在apache的配置⽂件中(⼀般是httpd.conf)修改加⼊允许rewrite的选项,需要的步骤是:1. 找到LoadModule rewrite_modulemodules/mod_rewrite.so将其前⾯的#去掉2. 在项⽬所在的⽬录下<Directory “projectPath”>中修改AllowOverride的值为All,Order allow,deny / Allow from all3. 在项⽬所在根⽬录下建⽴.htaccess⽂件,内容为RewriteEngine on #重写引擎打开RewriteRule!\.(js|ico|gif|jpg|png|css)$ index.php#制定除js,ico,gif,jpg,png,css以外的⽂件全都被重置到index.php,index.php为项⽬的⾸页(其实是前端转发控制页)简单的Zend Framework安装测试⽅法:创建⽂件test.php内容:<?phprequire_once(‘Zend/Date.php’);$date=new Zend_Date();echo $date>如果能正常输出则说明Zend安装⼤体正常。
图解Zend_Studio使用
图解zend studio使用指南1.前言Zend Studio是一款以eclipse为基础开发的php集成开发环境,因此许多操作其实和eclipse是一致的,因此如果你使用过eclipse,那么可以不看或者快速浏览一下本文。
对于没有使用过eclipse的同学来说,可以花点时间看一下本文,希望能够对你以后的开发工作带来帮助。
2.安装zend studio可以从zend的官网下载到,下载完之后安装即可。
对于习惯用vi进行开发的同学,还可以安装vi插件,具体操作请看下面3.43.基本概念为了熟悉zend studio(eclipse)的操作环境,我们先来看一下zend studio打开以后界面:这个界面上其实分为几个部分,菜单栏和工具栏,跟普通软件没有什么区别,但是这里多出来一个Perspective的概念,而一个Perspective是由多个View和一个(或者没有)Editor区域组成的。
下面我们就来具体看一下。
3.1.PerspectivePerspective其实就是多个View和Editor的聚合,是一个为了方便某种具体的操作或者开发而事先设置好的,比如上图中就是一个PHP开发的perspective。
你可以注意到屏幕的右上角有一个区域,那里PHP是被选中的,如下图。
这里还展示了其他两个perspective,如果点击上图中最左边的图标,还可以看到许多其他的perspective。
我们看一下SVN Repository Exploring这个:3.2.View一个perspective里会有许多的view,这些view分别是一个小窗口,代表不同的功能,一般用来展示某些属性或者配置等。
比如上图中的SVN Exploring中,左侧有一个Explore的View,下面有三个View。
你可以根据自己的喜好在一个perspective里关闭或者打开新view。
关闭直接点击view右上图的x就可以了,而打开则需要在菜单的window->show view->other里进行选择,如下图:这种选择将重置之前perspective的默认view配置。
安装Zend框架和Zend
安装Zend框架和Zend_ToolZend Framework 配置要求∙PHP版本大于PHP 5.2.4。
∙Web 服务器支持重写,如Apache mod_rewrite。
∙服务器开启重写功能,如Apache http.conf 配置文件,需设置AllowOverride None 改为 AllowOverride All,以支持.htaccess 文件。
Zend Framework 安装这里以Ubuntu为例(其他Linux/Unix系统类似)。
首先到Zend 官网下载最新Zend Framework。
版本选择:Zend Framework 1.11.11 Minimal 即可,Zend Framework 1.11.11 Full 包括额外的库(/extras/library/ZendX/),以及一些demo等,有需要可下载Full版本)wget/releases/ZendFramework-1.11.11/ZendFramework-1.11.11-minimal. tar.gz下载完成可解压到想要的任意目录。
比如/usr/share/:sudo tar -zxvpf ZendFramework-1.11.11-minimal.tar.gz -C /usr/share添加Zend library解压以后,要设置确保解压文档中Zend Framework 的library 目录在php 配置的 inclue_path 变量的目录下。
大概有三种方法:1.执行 php -i | grep include_path 得知当前php的include_path路径,比如/usr/share/php,再将library目录下的Zend文件夹整个复制/移动到/usr/share/php/目录下。
2.修改php.ini 配置,将解压后的library目录路径添加到include_path变量中,(php.ini文件路径查询:php -i | grep php.ini;注意ubuntu 11.04是将用于cli和Apache的 php.ini 配置文件分开的,cli是/etc/php5/cli/php.ini,Apache是/etc/php5/apache2/php.ini)。
Zend+Framework+入门指南
AllowOverride None 改成
AllowOverride All 来实现。更详细的设置方法可以在 Apache 发行文档中找到。如果没有正确配置 mod_rewrite 及.htaccess, 那么除了本教程的首页外你将不能看到任何其它的页面。
获取框架
Zend Framework可以从 /download下载(有.zip或.tar.gz两种格式)。
Zend Framework 1.5.x 入门教程(简体中文版)
Zend Framework 入门教程(简体中文版) Getting Started With the Zend Framework
Author:Rob Allen, Document Revision:1.5.2 Copyright© 2006, 2008
Zend Framework 1.5.x 入门教程(简体中文版)
需求
使用 Zend Framework 需要下列环境: PHP 5.1.4 或以上版本 支持 mod_rewrite 功能的 Web 服务器
一些假设
本教程假定你运行 PHP 5.1.4 或以上版本,外加 Apache Web 服务器。Apache 必须已安装并正确配置了 mod_rewrite 扩展。 必须保证 Apache 已配置成支持.htaccess 文件的模式。通常这可以通过在 httpd.conf 中将
Zend Framework 使用 Model-View-Controller(MVC)架构。它将程序中不同部分独立开来,使得应用程序的
翻译:Altair (简体中文版 v0.12) / (Under Construction) 第 2 页 共 25 页
zendframework官方入门手册
为了创建项目,你必须首先下载并解压缩Zend框架。
相处了一个完整的Zend框架的PHP堆栈最简单的方法是通过安装»Zend服务器。
Zend服务器有本地安装的Mac OSX,Windows中的Fedora Core和Ubuntu,以及作为一个普遍的兼容大多数Linux发行版的安装包。
框架文件后,您已经安装了Zend服务器,可根据发现的/ usr /本地/ ZEND / Mac OSX和Linux上的份额/ ZendFramework,和C :\ Program Files文件\的Zend \ ZendServer \共享\ ZendFramework Windows上。
已配置的include_path将包括Zend框架。
或者,您可以»下载最新版本的Zend框架和提取的内容,使你这样做了说明。
或者,您可以将路径添加到库/归档文件的子目录到你的php.ini 的设置。
这就是它!Zend框架正在安装,并准备使用。
注:ZF在您的Zend Framework安装的命令行工具是一个bin /子目录中,包含脚本zf.sh和zf.bat,分别为基于UNIX和基于Windows的用户。
使这个脚本的绝对路径的说明。
无论你看到的命令引用ZF,请替换脚本的绝对路径。
在类Unix系统,你可能想使用shell 的别名功能:如果你有问题设立的ZF命令行工具,请参阅到的别名zf.sh =路径/ / ZendFramework / BIN / zf.sh。
手册。
打开一个终端(在Windows中,开始- >运行,然后使用CMD)。
导航到一个目录,您想启动一个项目。
然后,使用相应的脚本路径,并执行下列之一:1.%ZF创建项目快速启动运行此命令将创建您的网站的基本结构,包括你最初的控制器和视图。
树看起来如下:1.快速入门2.| - 应用3.| | - Bootstrap.php4.| | - CONFIGS5.| |` - 的application.ini6.| | - 控制器7.| | | - ErrorController.php8.| |` - IndexController.php9.| | - 模型10.|` - 意见11.| | - 佣工12.|` - 脚本13.| | - 错误14.| |` - error.phtml15.|` - 指数16.|` - index.phtml17.| - 库18.| - 公共19.| | - htaccess的。
ZEND FRAMEWORK中的简单工厂模式 图文
Zend Framework中的简单工厂模式图文某天又然后想到好久没复习设计模式了。
综合一下,复习一个设计模式之后在ZF中找一下使用这模式的源码吧,不读所有源码,读读比较”高级”的部分吧,要说模式,暂时不知道是不是所有模式ZF里面都有,但是应该有足够的模式够我最近看了,在说可以找找其他开源的软件来找模式前段时间用来ZF,把他当黑盒感觉不是很好,一直有看其源码的冲动,但是。
如果一点一点点看的话,挑战确实有些大了。
某天又然后想到好久没复习设计模式了。
综合一下,复习一个设计模式之后在ZF中找一下使用这模式的源码吧,不读所有源码,读读比较”高级”的部分吧,要说模式,暂时不知道是不是所有模式ZF里面都有,但是应该有足够的模式够我最近看了,在说可以找找其他开源的软件来找模式。
这段时间被各种笔试神马乱七八糟的把生活搞得稍微有点乱,但是不管怎样,复习还是必须的吧。
再说一下ZF吧,ZF一个好处就是各个component比较独立,component之间没有过多的依赖,这样一来,为使用者提供了方便,当然也为我这样无聊且懒的想看源码的人提供了方便。
今天看看简单工厂,ZF里面不缺模式,更不缺工厂模式,大名鼎鼎的的Zend_Db就毫不吝啬的使用简单工厂,再ctrl+h(zend studio下)一下会发现factory特别多,如果没猜错应该大多应该也是简单工厂。
由于Zend_Db最常用,我也就自然的会比较想看一下他的实现。
在查看源码之前先复习一下怎么用Zend_Db和简单工厂(这里是一个stack,先复习简单工厂)。
复习简单工厂模式用类图回忆一下,简单工厂类图:借用《研磨设计模式》作者的一张图,可以看到Client通过factory来获取对象,通过Api结构来调用。
用factory把具体的Api的创建隐藏起来。
而其他所有使用者在使用时,只需要知道用facto ry创建,通过Api结构调用即可,简单复习完成。
看到类图应该能想起简单工厂了,因为他本身确实很简单。
基于ZendFramework的网站设计与实现
A ah +Myq + h/ e y o ) 到 I pce sl p p pr t n 受 Vp h T界越来越多 的关 注 。L MP是 一个 运 行在 使用 最 广泛 的 We A b 服务 器上 的最强大 的 网站解 决方案 , 中 Ln x是开 其 i u
代互 联网应 用的统称 , 一次从 核心 内容 到外部 应用 是 的革命 。We1 0到 We 2 0 简 单 来 说 , 是 从单 纯 b. b. , 就 的“ ” 读/ ” 展 , 被动接 收互 联 网信 息 向主 读 向“ 写 发 从 动创 造互联 网信 息发 展 。当前 主流 的 We b后 台开 发技术 有 A P JP P P等 , 以 P P技术 为 基 础 的 S 、S 、 H 而 H 黄金组合 A ah + S L P P得到 了尤为 广泛 的应 pce My Q + H 用 。P P语 言具有开放 源代码 、 H 简单 、 高效 、 向对象 面 等特性 。近 几 年来 , 着 P P语 言 的广 泛使 用 ,H 随 H PP
Fa e ok的不断完善 , 不断丰 富 , 有越来 越 r wr m 功能 将会
多的 网站加入到 Z n r w r cdFa ok的阵营 中来 。 me
1 Z n rme ok技术 e dF a w r
1 1 MV . C设计模式
作者简介 : 张朝阳 (98 )男 , 18 一 , 山东人 , 硕士研究 生 , 研究 方 向为多 媒体通信 ; 熊淑华 , 副教授 , 硕士生导师 , 研究方向为多媒 体通信。
关键 词 :edFa eokMV ;H ; b . Z n rm w r; C P P We20
中 图分类 号 :P 1 T31
文 献标 识码 : A
zend studio详细使用教程
zend studio详细使用教程这一部分是让大伙儿熟悉Zend Studio集成开发环境的界面布局,以及菜单、工具栏命令的功能介绍。
目的是熟悉开发环境,明白zde到底都给我们提供了什么?或者这些都是干什么用的?本文将以图文并茂的方式呈现给大家。
先看一下整个界面的截图窗口界面:•编辑器:主区域的一个窗口,用来编写代码的,能同时打开多个代码编辑窗口,具强大的提示、语法检查和代码高亮功能,支持php、html代码,是不可多得的神器级编辑工具。
•浏览器(Browser):zde内置的一个标准的互联网web浏览器,其调试工具栏又让它成为使用zend studio进行调试时的重要组成部分(关于zend studio强大的调试功能,我会在后面单独撰文以讲之。
)•文件管理器:zend studio 5.5.1版的文件管理器窗口包含了3个选项卡:①文件系统:可以浏览本地硬盘上所有的文件,并可以选择性的打开使用编辑器对其编辑;②项目:在该选项卡您可以方便的进行项目的新建、打开、保存以及添加等操作,这些操作都藏在右键快捷菜单中;③SQL:这里是管理数据库连接的,zend studio 5.5.1版支持以下数据库连接:Oracle、SQLite、MSSQL、PostgreSQL、MYSQL、DB2等等。
•检查器:该窗口包含了3个子选项卡:①文件检查器:列出了编辑器当前打开文件的引用文件、常量、自定义函数等等;②项目检查器:列出了当前项目的所有定义类、函数、常量等内容;③列出当前使用的php版本(zde支持php4和php5,可以在首选项中设置切换)。
•调试窗口:调试窗口包含了5个选项卡:①断点:显示所有设置的断点;②堆栈:调试时显示调用堆栈;③监视点:显示已定义的监视点;④变量:调试时显示全局和局部变量;⑤输出缓冲区:调试时显示脚本的缓冲区数据。
•消息窗口:用于查看zde在编译时产生的包括Notice、Warning、Error三个级别的信息。
zend framework多模块多布局配置
zend framework对多模块的支持是很好的,但是可能是由于功能太过强大的缘故,部署起来并不是很容易。
许多人在使用过程中都会遇到这样那样的问题,而且zend framework现在已经到1.11版本了,网络上的很多资料都还停留在旧版本上,因此我在这里以当前的最新版本1.11为例,来简单介绍一下如何使用zend framework创建模块化的应用程序。
1、准备工作首先假设你已经部署了web服务器和php,并下载了zend framework的最新版本,创建了一个最原始的zend framework项目,并可以访问默认的action了。
你可以使用zend framework工具来创建项目,具体操作参见使用zend framework创建项目。
当然也可以自己手动建立文件夹和文件,参见zend framework推荐的项目目录结构。
简单地看一下默认的几个重要目录。
首先是public,它不但存放了程序的入口点index.php,还可以存放图片,css,javascript文件等。
其次是library,用于存放一些类库,包括你自己定义的或第三方的类库。
然后是test,用于存放单元测试等测试文件的。
最后,也是和我们这里要讲的关系最大的目录application。
进到application目录下,会有以下目录:configs:存放配置文件,一般会有一个主配置文件application.ini;controllers:操制器,如默认的IndexController.php;models:存放业务逻辑,数据模型等文件;views:视图层的脚本,一般以.phtml为后缀名;modules:模块目录,使用工具默认选项自动生成的是没有这个目录的,需要手动添加。
modules底下可以包含多个以模块名命名的文件夹,如admin,默认是default,一个文件夹代表一个模块,其下的目录结构与application目录类似,又可以包含controllers,models,views等目录。
zendframework结构应用示例图
Action Controller
Initialize Action Helper Broker
Register Action Controller with Helper Broker No Run setActionController() method in helper
Notify Helper Broker of Dispatch Startup
Front Controller
Yes
cont.
Notify Plugin Broker of Dispatch Loop Completion
Is “returnResponse” Flag set to TRUE?
sendResponse()
Request Object No
Plugin Broker
application/ bootstrap.php
Configure include paths
Prepares Front Controller
Pass in Environment (development/staging/...)
Register Custom Plugin Initializer that runs $this->initDb(); $this->initHelpers(); $this->initView(); $this->initPlugins(); $this->initRoutes(); $this->initControllers();
V 1.01, Created by Polley Wong Yes Replace current Action OR Skip current action
Zend Framework 快速开始
Zend Framework & MVC 介绍Zend FrameworkZend Framework 是一个为PHP5开发的开源、面向对象的web应用程序框架。
Zend Framework 经常被称为“组件库”,因为它有许多松散链接的、几乎独立使用的组件。
但是Zend Framework 也提供高级的“模型-试图-控制器(MVC)”组件(implementation),它能够为你的应用程序建立一个基本结构。
带有简短描述的Zend Framework完整组件列表可以在»components overview中找到。
这个快速教程将向你介绍一些Zend Framework的最常用的组件,包括Zend_Controller, Zend_Layout, Zend_Config, Zend_Db, Zend_Db_Table, Zend_Registry,,还包括一些制图助手。
使用这些组件,我们将在几分钟内建立一个简单的数据库驱动的留言板(guestbook)应用程序。
程序的完整源代码可以从下面的压缩文件中得到:∙» zip∙» tar.gzModel-View-Controller这就是每个人谈论的MVC模式。
为什么应该关心?MVC不仅仅是听起来时髦,随时可以读出的由三个首字母组成的缩略语,它几乎已经成为web应用程序的设计标准。
有充分的理由相信,大多数的web应用程序代码属于下面三个类别中的一个:展示、业务逻辑和数据存取。
MVC模式模型分开关注这三个方面(The MVC pattern models this separation of concerns well)。
最终,展示代码将成为带有业务逻辑和数据存储代码的应用程序的一部分。
许多开发者已经发现这种为了组织代码而定义明确的分离,特别是当不止一个开发者工作于同一个应用程序时。
注:更多信息我们来打破这种模式,来看看各个单件:模型(Model)-这是你的应用程序的一部分,其在一系列抽象概念后定义了基本功能。
zendframework数据库操作总结
zendframework数据库操作总结第一篇:zendframework数据库操作总结最近在用ZF开发东西,虽然ZF还不是那么的完美,但是已经足够快的提高开发效率了,对于ZF运行效率不高的问题,等系统运行的时候再说,开发的时候还是尽量用JS JQuery Ajax等技术解决吧。
由于也是初级学习,所以对于一些基本的数据库操作不是很熟练,参考了网上比较全面的数据库操作,在这里总结一二。
像是如果取得某一行的某个字段值的过程是这样的,先用$result=$db->fetchCol(。
)返回一个数组,然后取数组的第一个值,即$result[0]就是所要取得值了。
Zend_Db数据库知识例子:Model文件:$this->fetchAll(“is_jian=1″,”id DESC”,0,2)->toArray();//根据is_jian=1,按id倒序排列取前2条记录当第一个参数为null时,则直接按id倒序排列ASC为正序。
路由文件:$video=new Video();//实例化数据库类$this->view->get2Video =$video->get2Video();//取到2条首页推荐的数据 index.phtml文件:get2Video as $video): ?> 添加引号防止数据库攻击 quote用法$value = $db->quote(‘St John”s Wort’);// $value 现在变成了‘”St John”s Wort”‘(注意两边的引号)// 为数组加引号$value = $db->quote(array(‘a’, ‘b’, ‘c’));// $value 现在变成了‘”a”, “b”, “c”‘(“,”分隔的字符串)quoteInto用法echo $where = $db->quoteInto(‘id = ?’, 1);// $where 现在为‘id = “1″‘(注意两边的引号)// 在where语句中为数组加上引号$where = $db->quoteInto(‘id IN(?)’, array(1, 2,3));// $where 现在为‘id IN(“1″, “2″, “3″)’(一个逗号分隔的字符串)(1)数据查询总结直接进行查询.(使用完整的sql语句)//function quoteInto($text, $value, $type = null, $count = null)$db =$this->getAdapter();$sql = $db->quoteInto(‘SELECT * FROM `m_video` WHERE `is_guo` =?’, ’1′);$result = $db->query($sql);// 使用PDOStatement对象$result将所有结果数据放到一个数组中 $videoArray = $result->fetchAll();fetchAll用法fetchAll($where = null, $order = null, $count = null, $offset = null)取回结果集中所有字段的值,作为连续数组返回,如果参数不设置就写成null 可以取回结果集的指定条数$videoArray=$this->fetchAll(“is_jian=1 and is_guo=1″,”id DESC”,0,2)->toArray();fetchAssoc用法fetchAssoc($sql, $bind = array())取回结果集中所有字段的值,作为关联数组返回, 第一个字段作为码$db = $this->getAdapter();$videoArray=$db->fetchAssoc(“SELECT*FROMm_videoWHERE`is_jian` = :title”,array(‘title’ => ’1′));fetchCol用法fetchCol($sql, $bind = array())取回所有结果行的第一个字段名$db = $this->getAdapter();$videoArray=$db->fetchCol(“SELECTnameFROMm_videoWHERE`is_jian` = :title”,array(‘title’ => ’1′));fetchOne用法fetchOne($sql, $bind = array())只取回第一个字段值$db = $this->getAdapter();echo $videoArray=$db->fetchOne(“SELECT count(*)FROM m_videoWHERE `is_jian` = :title”,array(‘title’ => ’1′));fetchPairs用法fetchPairs($sql, $bind = array())取回一个相关数组,第一个字段值为码(id),第二个字段为值(name)返回:Array([1] => 十二生肖奇缘[2] => 桃花运),1,2:为id字段。
zf教程
【转】zend framework教程(二)2011-03-01 16:31转载自chendezh2最终编辑chendezh2Zend Framework怎样连接数据库并执行增删查改接着我来给大家讲第二篇的教程.有PHPer也给我提建议说这方面的太基础的东西没有多大作用.希望我可以写一些高级一点的教程..但是我自己的技术水平也就这个样子.自己都不知道高级的是怎样一个方面..所以没有办法去达到大家的建议..同时也有PHPer说不如就我自己的博客作来案例来分析..这样也是可行的..我想也是,不过大家要是基础都没有怎么可能会写一个博客呢?到时候只会有一堆的问题来问..所以我还是把这一系列教程给写完..要是有时间..再就我的博客作为案例来讲解..希望可以帮上一些初学者.好了,言规正传....我开始讲第二篇教程了...我们接着上一篇的教程,项目的结构目录不变...我们先要在数据库里建立一个叫message的表,它有三个字段.分别为id,title,content.其中id为主键.现在我们开始第一步:在application文件夹下面加入一个config文件夹,并在这里面增加一个config.ini文件..这里面是配置数据库基本信息.如下代码所示:[general]db.adapter=PDO_MYSQL //请开启PDO扩展db.config.host=localhost //Mysql主机ername=root //用户名db.config.password= //密码,我这里为空db.config.dbname=zendoophp //数据库名第二步:在application下的models文件夹下增加一个Message.php文件..这里命名是以数据表名称相同.<?phpclass Message extends Zend_Db_Table{protected §_name ="message";protected §_primary = 'id';}第三步:接下来..我们要在我们的入口文件index.php里加入下面代码如下://配置数据库参数,并连接数据库$config=new Zend_Config_Ini('./application/config/config.ini',null, true);Zend_Registry::set('config',$config);$dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config->to Array());$dbAdapter->query('SET NAMES UTF8');Zend_Db_Table::setDefaultAdapter($dbAdapter);Zend_Registry::set('dbAdapter',$dbAdapter);第四步:我们就要对我们的IndexController.php控制器进行操作了..分别有四个方法.它们的作用就是增加数据,修改,删除数据.程序如下..(我在程序员都有注解.这里不就多说!):<?phpclass IndexController extends Zend_Controller_Action{function init(){$this->registry = Zend_Registry::getInstance();$this->view = $this->registry['view'];$this->view->baseUrl = $this->_request->getBaseUrl();}function indexAction(){$message=new message();//实例化数据库类//这里给变量赋值,在index.phtml模板里显示$this->view->bodyTitle = '<h1>Hello World!</h1>';//取到所有数据.二维数组$this->view->messages=$message->fetchAll()->toArray();//print_r( $this->view->messages);echo $this->view->render('index.phtml');//显示模版}function addAction(){//如果是POST过来的值.就增加.否则就显示增加页面if(strtolower(§_SERVER['REQUEST_METHOD'])=='post'){//过滤一些数据.不过这里还有检测一些动作没有做..//请大家加了..我就不多写那么多了.时间关系..Zend_Loader::loadClass('Zend_Filter_StripTags');$filter=new Zend_Filter_StripTags();$content=$filter->filter(($this->_request->getPost('content')));$title=$filter->filter(($this->_request->getPost('title')));$message=new Message();$data=array('content'=>$content,'title'=>$title); $message->insert($data);unset($data);echo '您增加数据成功!请您<a href="'.$this->view->baseUrl.'/index/index/">返回</a>';}else{echo $this->view->render('add.phtml');//显示增加模版}}public function editAction(){$message=new Message();$db = $message->getAdapter();Zend_Loader::loadClass('Zend_Filter_StripTags');$filter=new Zend_Filter_StripTags();//同上面addActionif(strtolower(§_SERVER['REQUEST_METHOD'])=='post'){$content=$filter->filter(($this->_request->getPost('content')));$title=$filter->filter(($this->_request->getPost('title')));$id=$filter->filter(($this->_request->getPost('id')));$set=array('content'=>$content,'title'=>$title);$where = $db->quoteInto('id = ?', $id);//更新表数据$message->update($set, $where)unset($set); echo '您修改数据成功!请您<a href="'.$this->view->baseUrl.'/index/index/">返回</a>';}else{$id=$filter->filter(($this->_request->getParam('id')));$this->view->messages=$message->fetchAll('id='.$id)->toArray();echo $this->view->render('edit.phtml');//显示编辑模版}}public function delAction(){ $message=new Message();//能过ID删除数据.这里有一些动作没有做.比如说没有ID页面要去哪里.//.我只是给大家一个思想..所以不会那么完整$id = (int)$this->_request->getParam('id');if ($id > 0) {$where = 'id = ' . $id;$message->delete($where);}echo '您删除数据成功!请您<a href="'.$this->view->baseUrl.'/index/index/">返回</a>';}}第五步:就是增加对应的View.也就是网页模板..分别是add.phtml,edit.phtml,index.phtml.这在程序里也有注解.请大家下载文件运行查看.OK!第二篇教程写完...只有一个查没有写..我想这个可以给PHPer自己来写..因为我后期会写Zend_Search_Lucene教程..我就不在这里浪费时间了...文件下载地址:源码下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Zend Framework实例教程作者:张佳(译)来源:PHPEye开源社区 2006-11-07 最后更新:2006-12-19 15:42:16收藏:最新更新:2006年3月11日Brain BulbZend Framework发布了!虽然仍处于开发初期,这个教程仍突出讲解目前几个最好的功能,并指导你完成一个简单程序的构建。
Zend最早在社区里发布了ZF。
基于同样的想法,这个教程写来用于展示ZF 现有的功能。
由于这个教程是在线发布,我将在ZF变化时对其进行更新,以便尽可能有效。
要求Zend Framework要求PHP5。
为了更好利用本教程的代码,你还需要Apache 网页服务器。
因为示范程序(一个新闻管理系统)用到了mod_rewrite。
这个教程的代码可以自由下载,所以你可以自己试一下。
你可以从Brain Buld 的网站下载到代码:/zend-framework-tutorial.tar.gz。
下载ZF当你开始这篇教程时,你需要下载ZF的最新版本。
你可以用浏览器手工从/download选择tar.gz或zip文件进行下载,或者使用下列命令:$ wget /download/tgz$ tar -xvzf ZendFramework-0.1.2.tar.gz提示:Zend计划提供自有PEAR通道简化下载。
一旦你下载了预览版,把library目录放到方便的地方。
在这个教程,我把library 重命名为lib以便有个简洁的目录结构:app/views/controllers/www/.htaccessindex.phplib/www目录是文档根目录,controllers和views目录是以后会用到的空目录,而lib目录来自你下载的预览版。
开始我要介绍的第一个组件是Zend_Controller。
从很多方面看,它为你开发的程序提供了基础,同时也部分决定了Zend Framework不只是个组件的集合。
但是,你在用之前需要将所有的得到的请求都放到一个简单的PHP脚本。
本教程用的是mod_rewrite。
用mod_rewrite自身是一种艺术,但幸运的是,这个特殊的任务特别简单。
如果你对mod_rewrite或Apache的一般配置不熟悉,在文档根目录下创建一个.htaccess文件,并添加以下内容:RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php提示:Zend_Controller的一个TODO项目就是取消对mod_rewrite的依赖。
为了提供一个预览版的范例,本教程用了mod_rewrite。
如果你直接把这些内容添加到httpd.conf,你必须重启网页服务器。
但如果你用.htaccess文件,则什么都不必做。
你可以放一些具体的文本到index.php并访问任意路径如/foo/bar做一下快速测试。
如你的域名为,则访问/foo/bar。
你还要设置ZF库的路径到include_path。
你可以在php.ini设置,也可以直接在你的.htaccess文件放下列内容:php_value include_path "/path/to/lib"ZendZend类包含了一些经常使用的静态方法的集合。
下面是唯一一个你要手工添加的类:<?phpinclude 'Zend.php';?>一旦你包含了Zend.php,你就已经包含了Zend类的所有的类方法。
用loadClass()就可以简单地加载其它类。
例如,加载Zend_Controller_Front类:<?phpinclude 'Zend.php';Zend::loadClass('Zend_Controller_Front');?>include_path能理解loadclass()及ZF的组织和目录结构。
我用它加载所有其它类。
Zend_Controller使用这个controller非常直观。
事实上,我写本教程时并没有用到它丰富的文档。
提示:文档目前已经可以在/manual/zend.controller.html看到。
我一开始是用一个叫Zend_Controller_Front的front controller。
为了理解它是怎么工作的,请把下列代码放在你的index.php文件:<?phpinclude 'Zend.php';Zend::loadClass('Zend_Controller_Front');$controller = Zend_Controller_Front::getInstance();$controller->setControllerDirectory('/path/to/controllers');$controller->dispatch();?>如果你更喜欢对象链结,可以用以下代码代替:<?phpinclude 'Zend.php';Zend::loadClass('Zend_Controller_Front');$controller = Zend_Controller_Front::getInstance()->setControllerDirectory('/path/to/controllers')->dispatch();?>现在如果你访问/foo/bar,会有错误发生。
没错!它让你知道发生了什么事。
主要的问题是找不到IndexController.php文件。
在你创建这个文件之前,应先理解一下ZF想让你怎样组织这些事情。
ZF把访问请求给拆分开来。
假如访问的是/foo/bar,则foo是controller,而bar是action。
它们的默认值都是index.如果foo是controller,ZF就会去查找controllers目录下的FooController.php文件。
因为这个文件不存在,ZF就退回到IndexController.php。
结果都没有找到,就报错了。
接下来,在controllers目录创建IndexController.php文件(可以用setControllerDirectory()设置):<?phpZend::loadClass('Zend_Controller_Action');class IndexController extends Zend_Controller_Action{public function indexAction(){echo 'IndexController::indexAction()';}}?>就如刚才说明的,IndexController类处理来自index controller或controller 不存在的请求。
indexAction()方法处理action为index的访问。
要记住的是index 是controller和action的默认值。
如果你访问/,/index或/index/index,indexAction()方法就会被执行。
(最后面的斜杠并不会改变这个行为。
) 而访问其他任何资源只会导致出错。
在继续做之前,还要在IndexController加上另外一个有用的类方法。
不管什么时候访问一个不存在的控制器,都要调用noRouteAction()类方法。
例如,在FooController.php不存在的条件下,访问/foo/bar就会执行noRouteAction()。
但是访问/index/foo仍会出错,因为foo是action,而不是controller.将noRouteAction()添加到IndexController.php:<?phpZend::loadClass('Zend_Controller_Action');class IndexController extends Zend_Controller_Action{public function indexAction(){echo 'IndexController::indexAction()';}public function noRouteAction(){$this->_redirect('/');}}?>例子中使用$this->_redirect('/')来描述执行noRouteAction()时,可能发生的行为。
这会将对不存在controllers的访问重定向到根文档(首页)。
现在创建FooController.php:<?phpZend::loadClass('Zend_Controller_Action');class FooController extends Zend_Controller_Action{public function indexAction(){echo 'FooController::indexAction()';}public function barAction(){echo 'FooController::barAction()';}}?>如果你再次访问/foo/bar,你会发现执行了barAction(),因为bar是action。
现在你不只支持了友好的URL,还可以只用几行代码就做得这么有条理。
酷吧!你也可以创建一个__call()类方法来处理像/foo/baz这样未定义的action。
<?phpZend::loadClass('Zend_Controller_Action');class FooController extends Zend_Controller_Action{public function indexAction(){echo 'FooController::indexAction()';}public function barAction(){echo 'FooController::barAction()';}public function __call($action, $arguments){echo 'FooController:__call()';}}?>现在你只要几行代码就可以很好地处理用户的访问了,准备好继续。