Zend_Framework_学习笔记.doc_第1页
Zend_Framework_学习笔记.doc_第2页
Zend_Framework_学习笔记.doc_第3页
Zend_Framework_学习笔记.doc_第4页
Zend_Framework_学习笔记.doc_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Zend Framework 基础邮箱:声明:如发现资料中有错误或不足之处,望不吝指正!调试环境:操作系统:windows vista homebasicPHP版本:5.2.5;Apache版本:2.2.6;MySql版本:5.0.45;Zend Framework版本:1.10.3;开发工具:easy Eclipse;注:本教程根据中文版改编,原版zf是0.9的版本!由于本人也是初学,使用该教程调试时发现好多代码无法正常使用,所以结合自己的学习经验,总结一下,写在这里。首先需要了解一下zf的运行环境:运行zf要求PHP版本是5.1.4或者更高,很多教程上明确指出“强烈建议使用5.2.3以后的版本”,因为这两个版本之间PHP作了重大修改和功能的完善! 搭建环境就不写了,只要是PHP的版本在5.1.4+就可以了;下面列出配置方法和要求:获取Zend Framework:可以从官方网站/download 最新的Zend版本;配置:打开apache的rewrite模块:进入apache安装目录,打开apache配置文件httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so,将前面的分号去掉;配置工程时会创建一个名为.htaccess的文件,我们需要配置apache支持,还是打开httpd.conf文件,查找AllowOverride None,将None改成All;做完以上两步,重启apache服务器,就可以开始zf之旅了!初学Zend Framework,所以还是参照原文,还是制作一个非常简单的库存系统网站,还是用这个简单的系统来管理我们的CD收藏,并允许我们对CD收藏执行增、删、改、查等操作。我们把这些存储在一个简单的数据库里面。数据库系统打算如下设计:数据库名:phpdb;sql语句:create database phpdb;/创建表:create table album(id int not null primary key auto_increment,artist varchar(30) not null,title varchar(100) not null)engine MyISAM default charset utf8; 由于这仅是一个简单的总结,所以,之于注册登录之类的东东就不写了- -所需要的页面:Add.phtml /这个是实现增加CD功能的视图Index.phtml /这个是显示CD列表;Edit.phtml /这个页面用于实现修改功能-好了,接下来该创建框架了!在easy Eclipse里创建如下图所示目录结构:图 1 zf框架目录结构说明:虽然Zend没有强求使用一个统一的目录结构,但是有关Zend的手册还是推荐了一个通用的目录结构,具体请参加Zend Framework手册;上图的创建过程是这样的:先创建一个名为zf-tutorial的php工程,工程创建好后,Eclipse会自动生成.settings目录和.project文件,这两个是Eclipse的默认系统文件,不用管它。接下是创建目录和文件,参照下图(下图也是最终目录结构)!图 2 最终目录结构先参考上图创建好你的目录结构,各个目录的作用后面会详细解释!建立好如上图所示的目录结构后,把下载的Zend Framework文件解压,将解压后的library目录下的zend目录拷贝到新建立的目录结构中的library目录下,如上图所示:拷贝完成后,Eclipse的自动提示功能会报错或者提示警告,这个不必担心,先不用管它,因为Eclipse在当前目录下找不到文件就会报错,这个是工具的问题,先不考虑。接下来创建两个文件,即.htaccess文件和index问价,放到zf-tutorial根目录下,如图2所示。打开.htaccess文件,输入如下内容:RewriteEngine onRewriteRule .* index.phpphp_flag magic_quotes_gpc offphp_flag register_globals off这个文件的作用是将本网站所有的请求定位到index.php文件上,实现当以入口的功能。文件的意思很简单,即对于任何url,定位到index.php。但是,网站公用的图像、js程序以及css文件不应该被重新定向到index.php,由于这些文件全部存放在public目录中,所以在public目录下添加一个.htaccess文件,写上这样一句话:RewriteEngine off /即关闭重定向;另外:为了安全,建议在图2 所示的目录下都建立一个这样的文件,来保护我们的程序:zf-tutorial/application/.htaccessdeny from allzf-tutorial/library/.htaccessdeny from all这样设置的好处似乎是多余的,但是并不为错,这样的多重保护貌似更安全。这种设置多个.htaccess文件的注意来自Jayson Minard 的文章 “Blueprint for PHP Applications:Bootstrapping (Part 2) ”. 建议大家去读读整个系列文章。具体这篇文章我也没读过,不过既然原教程这样写,我也不妨借鉴一下!-接下来就该设置我们的启动文件了,也就是传说中的index.php;我们在zf-tutorial目录下新建一个php文件,名字叫做:index.php。打开index文件,写上如下内容:setFallbackAutoloader(true);$registry = Zend_Registry : getInstance();$view = new Zend_View();$view-setScriptPath(./application/views/scripts/);$registryview = $view;$frontController = Zend_Controller_Front : getInstance();$frontController-setBaseUrl(/zf-tutorial)-setParam(noViewRenderer, true)-setControllerDirectory(./application/controllers)-throwExceptions(true)-dispatch();接下来,过一遍这个文件,看看各行代码都是什么意思。error_reporting(E_ALL | E_STRICT); date_default_timezone_set(Asia/Shanghai);这两行的是保证我们能够看见我们的程序中存在的错误(假设php.ini文件中display_errors 设置为on),第二行是设置时区,我用的是东八区,即亚洲上海。set_include_path(. . PATH_SEPARATOR . ./library . PATH_SEPARATOR . ./application/models . PATH_SEPARATOR . get_include_path();Zend Framework 要求所有的文件必须包含在include path 中,这几条代码的作用是将我们的模型目录加入include path ,这样,我们以后就能够很容易加载我们的模型类。require_once (Zend/Loader/Autoloader.php);Zend_Loader_Autoloader : getInstance()-setFallbackAutoloader(true);一开始,我们必须引入include Zend/Loader/Autoloader.php ,这样,我们就能够访问Zend_Loader_Autoloader 类,因为在这个类中有静态方法使我们的程序能够自动加载其他的Zend Framework 类,例如上面的第二行。Zend_Loader_Autoloader的作用是加载已经命名的类,它是通过将下划线转换成路径隔离符来实现的。$registry = Zend_Registry : getInstance();$view = new Zend_View();$view-setScriptPath(./application/views/scripts/);$registryview = $view;上面第一行获得静态实例,第二行是实例化Zend模板,第三行是设置模板显示路径,第四行是注册view。$frontController = Zend_Controller_Front : getInstance();$frontController-setBaseUrl(/zf-tutorial)-setParam(noViewRenderer, true)-setControllerDirectory(./application/controllers)-throwExceptions(true)-dispatch();上面这段代码的作用是用于配置程序的前端控制器。前端控制器使用路由类来影映射请求的url到正确的 php函数,然后显示页面。为了能使路由工作,需要设置url的哪一部分指向index.php路径,这样,它就可以在那个点后面寻找url元素。解释一下上面各行代码的作用,第一行是设置控制器,第二行配置基本路径、允许抛出异常、设置控制器路径等。最后一行是运行程序的代码。好了,到这里,启动文件配置完毕,如果你用http:/localhost/zf-tutorial/去测试,肯定是要出错的,出现的错误类似于:Fatal error: Uncaught exception Zend_Controller_Dispatcher_Exception withmessage Invalid controller specified (index) in原因是我们还没有设置好我们的程序。因为是打算做一个简单的CD管理系统,实现增删改查的功能,数据库在前面我们已经创建好了。接下来啰嗦一下zf是如何组织页面的,这个貌似很重要哈,不要嫌啰嗦,耐心点每个应用程序的页面叫做”action”,许多”action”组成控制器。例如,对于这样一个格式的URL :http:/localhost/zftutorial/news/view 控制器是news, action 是view。 它允许把相关的action 组织成组,例如, 一个news 控制器可以有current, archived和view 的actions。Zend Framework 的MVC 系统也支持把控制器组成模块(module),但这个教程没有足够大到必须用它。Zend Framework 控制器把index 作为一个缺省的action 而保留为特别的action。 这样,对于http:/localhost/zf-tutorial/news/ 这样的url,在news 控制器里的index action 将被执行。Zend Framework 也保留了一个缺省的控制器,也毫不惊讶地叫做index。这样,http:/localhost/zf-tutorial/ 将执行index 控制器下的action index。现在可以设置控制器了。 在Zend Framework 里,控制器是一个必需被叫做ControllernameController 的类。注意Controller name必需以大写字母开头。并且,这个类必须在叫做Controller nameController.php 这样的文件中,这个文件还必需在特定的控制器目录中。强调一下,Controller name必需以大写字母开头并其他字母一定是小写。每个action 是在控制器类里的public 函数,名字必需是action nameAction。在这里,action name应该以小写字母开头。这样在文件zf-tutorial/application/controllers/IndexController.php 里我们的控制器类叫做IndexController:接下来,来设置我们的控制器。前面说过,因为原版教程使用的是zf0.9的版本,而我在调试时使用的是1.0以后的版本,所以,大不相同先把我的控制器的基本框架写出来,然后一步一步的实现我们的功能registry = Zend_Registry : getInstance();$this-view = $this-registryview;$this-view-baseUrl = $this-_request-getBaseUrl();function indexAction() /默认的显示列表/实现登陆后的列表功能function addAction() /添加/实现添加功能function editAction() /修改/实现修改功能function deleteAction() /删除/实现删除功能好了,基本控制器的骨架已经搭建好了,接下来就可以做视图了。测试的话自己在函数里面写上一些输出语句就可以测试了。可以参考下面的地址:URLDisplayedhttp:/localhost/zf_tutorial/In IndexController:indexAction()http:/localhost/zf_tutorial/index/addIn IndexController:addAction()http:/localhost/zf_tutorial/index/editIn IndexController:editAction()http:/localhost/zf_tutorial/index/deleteIn IndexController:deleteAction()不出错误的话,控制器里的输出语句应该都可以很正常的显示在页面上。好了,开始做视图吧。我们需要三个视图,前面已经说过,不再啰嗦。先解释一下ZF里面的视图吧,这个貌似有点作用Zend Framework 的视图叫做Zend_View,有点顾名思义。视图将允许我们把显示页面的代码从action 函数里分离出来。基本的Zend_View 的用法是:$view = new Zend_View();$view-setScriptPath(/path/to/view_files);echo $view-render(view.php);这个之前在index.php已经设置过,不再设置了 - -下面给出我做的三个视图文件:index.phtml、edit.phtml、add.phtmlzf-tutorial/application/views/scripts/index/index.phtml:escape($this-title); ?link rel=stylesheet type=text/css media=screen href=baseUrl;?/public/styles/site.css /title; ?a href=baseUrl; ?/index/addAdd new albumidTitleArtistOperate?php for($i=0;$ialbums);$i+)?albums$iid; ?albums$ititle; ?albums$iartist; ?a href=baseUrl; ?/index/edit/id/albums$iid; ?/Edita href=baseUrl; ?/index/delete/id/albums$iid; ?/ Deletezf-tutorial/application/views/scripts/index/edit.phtml:title; ?title; ?form action=baseUrl; ?/index/edit/ method=postalbum as $album): ?Idinput type=text name=id value= size=20 readonly /Titleinput type=text name=title value= size=20 /Artistinput type=text name=artist value= size=20 /zf-tutorial/application/views/scripts/index/add.phtmlescape($this-title); ?link rel=stylesheet type=text/css media=screen href=baseUrl;?/public/styles/site.css /escape($this-title); ?form action=baseUrl ?/index/action; ? method=postArtistinput type=text name=artist value=album-artist);?/Titleinput type=text name=title value=album-title;?/input type=hidden name=id value=album-id; ? /input type=submit name=add value=buttonText; ? /-*-好了,这样,所有的视图就搞定了 这些视图如果直接打开的话会很难看,所以,还需要一个css文件,我们在模版中也有调用过这个文件,即zf-tutorial/public/styles/site.css文件,内容如下:zf-tutorial/public/styles/site.cssbody,html font-size: 100%;margin: 0;font-family: Verdana, Arial, Helvetica, sans-serif;color: #000;background-color: #fff;h1 font-size: 1.4em;color: #800000;background-color: transparent;#content width: 770px;margin: 0 auto;label width: 100px;display: block;float: left;#formbutton margin-left: 100px;a color: #800000;好了,风格也搞定了,接下来应该就是设置数据库了,因为我们的增删改查操作是针对数据库的,所以连接和操作数据库貌似也很重要那接下来就啰嗦一下吧!也就是我们框架中的模型部分,既然我们从显示视图里分离了程序的控制, 是时候看一下程序中的模型部分。记住,模型是处理程序的核心意图(所谓的“business rules”)因此,对我们来说就是数据库。我们将利用Zend Framework 中的 Zend_Db_Table 类来操作数据库中表的插入,更新和删除记录。为了使用Zend_Db_Table,我们需要告诉它哪个数据库(连同用户和密码)将被使用。因为我们不愿意在程序中hard-code,所以我们用一个配置文件来保存这些信息。Zend Framework 提供了一个Zend_Config 来提供灵活的面向对象访问配置文件。此刻,配置文件可以是一个PHP 数组,一个INI 文件或者XML 文件。我们将使用INI 文件:zf-tutorial/application/config.inigeneraldb.adapter = PDO_MYSQLdb.config.host = localhostdb.config.username = rootdb.config.password = 123456db.config.dbname = phpdb显然,这是我的数据库配置,调试时修改一下就可以了!使用Zend_Config 非常容易:$config = new Zend_Config_Ini(config.ini, section);接下来,我们将在加载我们的配置文件:在index.php问价设置控制器前面加入这样一段代码:$config=new Zend_Config_Ini(./application/config.ini,null,true);Zend_Registry:set(config,$config);$dbAdapter=Zend_Db:factory($config-general-db-adapter,$config-general-db-config-toArray();$dbAdapter-query(set NAMES UTF8);Zend_Db_Table:setDefaultAdapter($dbAdapter);Zend_Registry:set(dbAdapter,$dbAdapter);我们加载我们将要用的类(Zend_Config_Ini 和Zend_Registry)并加载application/config.ini 中的generalsection 到$config 对象。最后,我们分配$config 对象给注册表,这样它可以在程序的任何地方被取出来使用。为了使用Zend_Db_Table,我们需要告诉它我们刚刚加载的数据库配置信息。我们需要建立一个Zend_Db 的实例并用静态函数Zend_Db_Table: setDefaultAdapter()来注册它。强调一下,我们在启动文件里完成它(如上述代码所示):过一遍上述代码:$config=new Zend_Config_Ini(./application/config.ini,null,true);这行代码的作用是配置我们能够使用Zend_Config。也就是实例化Zend_Config类。Zend_Registry:set(config,$config);这行是使用静态方法Zend_Registry注册上述实例。后面的代码是加载配置文件和设置数据库之类的信息,不再啰嗦。另写一个文件再说!前面已经将数据库和数据库表建立好了,接下来往表里插入两条数据,因为默认显示的是我们的CD收藏列表,所以,我们需要向数据库中插入两条数据Insert into album(artist,title) values(test1,title1),(test2,title2);如果嫌少的话可以多插入几条,这个随您的便!接下来就该做模型了,Zend_Db_Table 是一个abstract 类,所以我们派生一个专门管理album 的类。如何命名类无关紧要,但类名和表名用同样的名字比较有意义。这样,类名就叫做Album 因为表名是album。为了告诉Zend_Db_Table 它将管理的表名,我们必须设置保护属性$_name 为表名。并且,Zend_Db_Table 假定表有一个主键叫做id,它能够自动增长。如果需要的话,这个字段可以更改。我们将保存我们的Album 表到模型目录:zf-tutorial/application/models/Album.php不是很复杂吧?!我们很幸运,我们的需求非常简单并且Zend_Db_Table 提供了所有我们需要的函数。然而,如果你需要特殊的函数管理你的模型,你可以把它们放到这个类里。一般来说,附加的函数将是附加的”find”类型方法,它使你要寻找的精确数据的集合有效。你也可以告诉Zend_Db_Table 关于相关的表并且它也可以获取相关的数据。好了,接下来,就来稍微啰嗦一下Zend_Db的常用函数吧,这个文档因为是基础,所以总结的不是很多,如果需要更多的资料自行查阅zf文档帮助。fetchAll($sql):取回结果集中所有字段的值,作为数组返回;fetchRow($sql):取回结果集中的第一行,适合在做登录验证时使用;这两个函数是最常用的。其他的常用函数还有:fetchAssoc($sql):取回结果集中所有字段的值,作为关联数据返回;fetchCol($sql):取回所有结果集的第一个字段名;fetchOne($sql):只取回第一个字段值;fetchPairs($sql):取回相关数组,第一个字段值为码,第二个字段为值;insert($arrayParams);其中$arrayParams是一个关联数组,下标是数据库字段名,值是字段名对应的值;update($arrayparams,$strSqlWhere);同上,$arrayParames是一个关联数组,$serSqlWhere是更新的条件;delete($strSqlWhere);同上,$strSqlWhere是删除操作的条件;具体使用方法等下实例里面会有介绍。好了,所有的准备工作都搞定了,接下来可以实现系统需要的功能了!激动人心的时刻到了!修改我们的控制器文件,修改indexAction方法,修改如下:function indexAction() /默认的显示列表$this-view-title = My Albums;$album = new Album();$this-view-albums = $album-fetchAll()-toArray();echo $this-view-render(index.phtml);好了,保存一下,就可以测试了,如果不出状况,输入如下地址,会显示很好的两行或几行,这个取决于您的数据库表里有几条数据了!http:/localhost/zf-totuzial好了,有点成就感了吧?接下来去实现增删改的方法吧,不罗嗦了,将IndexContronller.php文件贴到下面:registry = Zend_Registry : getInstance();$this-view = $this-registryview;$this-view-baseUrl = $this-_request-getBaseUrl();function indexAction() /默认的显示列表$this-view-title = My Albums;$album = new Album();$this-view-albums = $album-fetchAll()-toArray();echo $this-view-render(index.phtml);function addAction() /添加$this-view-title = Add New Album;if (strtolower($_SERVERREQUEST_METHOD) = post) /判断是否是POST提交方式Zend_Loader : loadClass(Zend_Filter_StripTags);$filter = new Zend_Filter_StripTags();$artist = $filter-filter($this-_request-getPost(artist);$artist = trim($artist);$title = trim($filter-filter($this-_request-getPost(title);if ($artist != & $title != ) $data = array (artist = $artist,title = $title,);$album = new Album();$album-insert($data);$this-_redirect(/);return;/ set up an empty album$this-view-album = new stdClass();$th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论