ZF快速入门——学习笔记

ZF快速入门。http://framework.zend.com/manual/en/learning.quickstart.html一般官方出的快速入门都是经过精心设计的,是一个宣传产品、拉拢学习者的机会,也是一个让学习者了解产品概况的最佳切入点。快速指南大都是一些官方建议的使用产品的标准工作流程。当然,离真正的开发应用还是有一定的差距。这类教程可谓是抛砖引玉,就像很多编程专家为初学者准备"hello,world"的DEMO。
ZF快速入门——学习笔记
“Zend Framework (ZF) 是一个开放源代码的 PHP5 开发框架,可用于来开发 web 程序和服务。ZF100%用面向对象代码实现。 ZF中的组件非常独立,每个组件几乎不依赖于其他组件。这样的松耦合结构可以让开发者独立使用组件。我们常称此为 “use-at-will”设计。”——摘自ZF官方手册。
“安装 Zend Framework 非常简单。只要你下载并解压它,并把发行版里的/library 文件夹加到你的 include 路径里就行了。 你也可以把 library文件夹移动到其它可共享的位置。”——官方ZF手册
SVN地址:http://framework.zend.com/svn/framework/standard/trunk
ZF并不只是传统意义上的类库、组件库,它也支持MVC框架。关于MVC在此就不过多说了。直奔主题。把环境搭建起来,享受这入门快车之旅。
我使用的是版本是ZendFramework-1.10.5(安装ZendServerCE5时装的),服务器使用ZendServerCE5(同时安装了MySQL及phpmyadmin,不过,本教程使用的数据库是sqlite)。
本教程的目录:1、Zend Framework & MVCIntroduction2、Create Your Project3、Create A Layout4、Create a Model and Database Table5、Create A Form6、Congratulations!
1、Zend Framework & MVCIntroduction本教程涉及到ZF的组件主要Zend_Controller, Zend_Layout, Zend_Config, Zend_Db,Zend_Db_Table, Zend_Registry, 还有一些view。MVC的简介如下:Model - This is the part of your application that defines itsbasic functionality behind a set of abstractions. Data accessroutines and some business logic can be defined in the model.数据访问过程和业务逻辑放在这层。View - Views define exactly what is presented to the user.Usually controllers pass data to each view to render in someformat. Views will often collect data from the user, as well. Thisis where you're likely to find HTML markup in your MVCapplications. 如何显示数据给用户。Controller - Controllers bind the whole pattern together. Theymanipulate models, decide which view to display based on the user'srequest and other factors, pass along the data that each view willneed, or hand off control to another controller entirely.操作Model,决定View如何显示等。通过此图,一目了然。


2、Create Your Project创建项目,本教程并不需要使用ZendStudio这样IDE环境,我在此使用的是npp5。2.1ZendServerCE5在安装时,安装到的ZF是1.10.5,位于安装路径的share文件夹下。该框架提供了一个命令zf来创建项目(主要是规化项目的目录结构及生成相关文档,win下zf是bat文件,调用php.exe执行了zf.php,具体看binzf.php中的内容。)。在WIN下,先把这个bin的路径添加到系统变量path中,方便在CMD下执行。打开cmd,进入到ZF的demos(里面有相关的官方示例),我就把项目创建于此吧。2.2创建的命令是:zf create project quickstart
新项目的文件夹结构是如此的:
2.3如果给PHP环境设置了ZF的include_path,那就可以使用ZF了,如果没有,在此用的方法是,直接把ZF文件夹下library里的Zend文件夹,考贝到项目的library文件夹中。

2.4项目建好之后,先来看几个主要的文件。application/Bootstrap.phpBootstrap类是一个启动类,用于进行资源和组件的初始化。默认情况下,是使用ZF中的FrontController来进行初始化。application/configs/application.iniZF是自配置的,配置文件是ini风格,里面可以给几种环境(测试、生产)进行配置。库的路径,启动类的路径也在此配置。应用程序的工作流程在哪里呢?按不同的功能,可放在/controller/action下。自动生成的有两个控制器是IndexController和ErrorController,都继承自Zend_Controller_Action,前者用于导航到索引页(通常是首页),后者用于应用产生错误时的提示。这些Contorller有时是通过框架自身的回调来使用的。视图,视图是放在application/views/scripts下,可以跟相关联的按控制器来命名。就比如说上面说到的两个Controller,对应的分别是:application/views/scripts/index/index.phtmlapplication/views/scripts/error/error.phtml
2.5项目建好了,要看到默认的运行效果,先在APACHE上做个虚拟主机,让项目动起来。配置Apache2conf下的httpd.conf,添加:
<VirtualHost *:80>ServerName quickstart.localDocumentRoot "D:/ProgramFiles/Zend/ZendServer/share/ZendFramework/demos/quickstart/public" SetEnvAPPLICATION_ENV "development"<Directory "D:/ProgramFiles/Zend/ZendServer/share/ZendFramework/demos/quickstart/public"> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all</Directory></VirtualHost>2.6要使虚拟主机服务名有效,在C:WINDOWSsystem32driversetc里,添加给hosts一条记录:127.0.0.1 quickstart.local2.7重启Apache,在地址输入:http://quickstart.local/,可看到界面:
这个页面其实就是IndexController控制下的视图:application/views/scripts/index/index.phtml。
3、Create A Layout上节中的view,其中只有部分HTML与PHP混合的代码,并不是都是一个完整页面。大多MVC架框架是这样设计,目的是希望每个活动(action)只返回跟本action有关的内容,而不是所有的应用要求的内容。在一些常见的界面与业务脱离的平台中,也多采用这种方式,或phpcms,Discuz等等。要生成完成的HTML页面代码和让站点有统一的外观,类似于全局模板。就使用ZF中的布局功能。实现方法有两个:两步视图Two Step View:the basic idea is that your application view creates arepresentation that is then injected into the master view for finaltransformation.组合视图Composite View:The Composite View pattern deals with a view made of one ormore atomic, application views.
3.1启用Layout。到项目文件夹下执行zf命令zf enablelayout。
此时,在应用的配置文件applicationconfigsapplication.ini中会增加一行:resources.layout.layoutPath = APPLICATION_PATH"/layouts/scripts/"在application文件夹会新增:applicationlayoutsscriptslayout.phtml3.2要使用XTHML文档格式,需要在启动时加入这一资源。在应用启动类application/Bootstrap.php中,添加一保护方法:_initDoctype()。class Bootstrapextends Zend_Application_Bootstrap_Bootstrap
{
protected function_initDoctype(){}
}3.3那哪种视图使用哪种文档类型从哪里获知呢?可以在配置文件application/configs/application.ini中初始一个变量来存放,这样就可以在应用程序中全局使用了。在中添加resources.view[]=3.4接下来给方法_initDoctype()添加内容:$this->bootstrap('view');$view = $this->getResource('view');$view->doctype('XHTML1_STRICT');3.5接下来就可以给layout.phtml添加代码了。<!-- application/layouts/scripts/layout.phtml--><?php echo $this->doctype()?><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type" content="text/html; charset=utf-8"/><title>ZendFramework QuickstartApplication</title><?php echo$this->headLink()->appendStylesheet('/css/global.css')?>给文档添加样式表,相当于生成HTML中的<link>标签。</head><body><div id="header"><div id="header-logo"> <b>ZF QuickstartApplication</b></div><div id="header-navigation"> <ahref="<?php echo $this->url( array('controller'=>'guestbook'), 'default', true)?>">Guestbook</a></div></div><?php echo$this->layout()->content?>默认文件只有这一行。此时显示的是首页的内容。</body></html>
增加的$view->doctype('XHTML1_STRICT');命令,会自动给网页添加上XHTML的表头等信息。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">这个时候的结果如图:


4、Create a Model and Database Table创建Model和数据库表本节使用的是数据库是sqlite4.1首先给配置文件增加数据库配置信息。使用ZF的命令(进入项目文件夹中执行)。(注意,教程中是在LINUX下给的命例,在WINDOWS的CMD下,把参数那的单引号改成双引号,要不会报错)。zf configure db-adapter"adapter=PDO_SQLITE&dbname=APPLICATION_PATH'/../data/db/guestbook.db'"productionzf configure db-adapter"adapter=PDO_SQLITE&dbname=APPLICATION_PATH'/../data/db/guestbook-testing.db'" testingzf configure db-adapter"adapter=PDO_SQLITE&dbname=APPLICATION_PATH'/../data/db/guestbook-dev.db'" development这三个命令给三种环境下的配置段设置不同的数据库路径。application.ini中会有:; application/configs/application.ini[production]; ...resources.db.adapter = "PDO_SQLITE"resources.db.params.dbname = APPLICATION_PATH"/../data/db/guestbook.db"[testing : production]; ...resources.db.adapter = "PDO_SQLITE"resources.db.params.dbname = APPLICATION_PATH"/../data/db/guestbook-testing.db"[development : production]; ...resources.db.adapter = "PDO_SQLITE"resources.db.params.dbname = APPLICATION_PATH"/../data/db/guestbook-dev.db"4.2在项目根目录下下建立data文件夹。使用脚本来创建sqlite数据库,表等信息。在项目根目下创建scripts文件夹,里面放有三个文件:schema.sqlite.sql 建立数据库,表结构data.sqlite.sql 添加一些测试用的数据。load.sqlite.php 让PHP来执行SQL命令然后在项目文件夹下,执行CMD命令:php scripts/load.sqlite.php --withdata这个创建的方法只是方便开发者使用,在生产环境下一般有专门的数据库操作。4.3创建表格对像cmd:zf create db-table Guestbook guestbook将会在application/models/DbTable/下生成Guestbook.php文件。class Application_Model_DbTable_Guestbook extendsZend_Db_Table_Abstract{ protected $_name = 'guestbook';}4.4创建表格的Mappercmd:zf create model GuestbookMapper编辑GuestbookMapper文档。// application/models/GuestbookMapper.phpclass Application_Model_GuestbookMapper{protected $_dbTable; publicfunction setDbTable($dbTable) { if (is_string($dbTable)){ $dbTable = new $dbTable(); } if (!$dbTable instanceofZend_Db_Table_Abstract) { throw new Exception('Invalid table data gatewayprovided'); } $this->_dbTable= $dbTable; return $this; } publicfunction getDbTable() { if (null ===$this->_dbTable) { $this->setDbTable('Application_Model_DbTable_Guestbook'); } return$this->_dbTable; } publicfunction save(Application_Model_Guestbook $guestbook) { $data = array( 'email' =>$guestbook->getEmail(), 'comment' =>$guestbook->getComment(), 'created' => date('Y-m-dH:i:s'), ); if (null === ($id =$guestbook->getId())) { unset($data['id']); $this->getDbTable()->insert($data); } else { $this->getDbTable()->update($data,array('id = ?' => $id)); } } publicfunction find($id, Application_Model_Guestbook $guestbook) { $result =$this->getDbTable()->find($id); if (0 == count($result)){ return; } $row =$result->current(); $guestbook->setId($row->id) ->setEmail($row->email) ->setComment($row->comment) ->setCreated($row->created); } publicfunction fetchAll() { $resultSet =$this->getDbTable()->fetchAll(); $entries =array(); foreach ($resultSet as $row){ $entry = new Application_Model_Guestbook(); $entry->setId($row->id) ->setEmail($row->email) ->setComment($row->comment) ->setCreated($row->created); $entries[] = $entry; } return $entries; }}
4.5 创建Model类。cmd:zf create model Guestbook编辑代码:class Application_Model_Guestbook{protected $_comment;protected $_created;protected $_email;protected $_id; publicfunction __construct(array $options = null) { if (is_array($options)){ $this->setOptions($options); } } publicfunction __set($name, $value) { $method = 'set' . $name; if (('mapper' == $name) ||!method_exists($this, $method)) { throw new Exception('Invalid guestbookproperty'); } $this->$method($value); } publicfunction __get($name) { $method = 'get' . $name; if (('mapper' == $name) ||!method_exists($this, $method)) { throw new Exception('Invalid guestbookproperty'); } return$this->$method(); } publicfunction setOptions(array $options) { $methods =get_class_methods($this); foreach ($options as $key=> $value) { $method = 'set' . ucfirst($key); if (in_array($method, $methods)) { $this->$method($value); } } return $this; } publicfunction setComment($text) { $this->_comment= (string) $text; return $this; } publicfunction getComment() { return$this->_comment; } publicfunction setEmail($email) { $this->_email =(string) $email; return $this; } publicfunction getEmail() { return$this->_email; } publicfunction setCreated($ts) { $this->_created= $ts; return $this; } publicfunction getCreated() { return$this->_created; } publicfunction setId($id) { $this->_id =(int) $id; return $this; } publicfunction getId() { return$this->_id; }}
4.6创建控制器。cmd:zf create controller Guestbook会在application/controllers下生成GuestbookController.php;在application/views/scripts/guestbook/下生成index.phtml;在tests/application/controllers/下生成GuestbookControllerTest.php4.7给自动创建的index活动编写代码,用来列出数据库内的数据。在application/controllers/GuestbookController.php中public function indexAction() { $guestbook = newApplication_Model_GuestbookMapper(); $this->view->entries= $guestbook->fetchAll(); }4.8再修改view。application/views/scripts/guestbook/index.phtml<p><ahref="<?php echo $this->url(array( 'controller' =>'guestbook', 'action' => 'sign'),'default', true)?>">Sign OurGuestbook</a></p>Guestbook Entries: <br /><dl><?php foreach($this->entries as $entry): ?><dt><?phpecho $this->escape($entry->email)?></dt><dd><?phpecho $this->escape($entry->comment)?></dd><?php endforeach?></dl>
到这里,本节就结束了,数据库这块,简言之就是创建与表相对的类。zf create db-table Guestbook guestbookzf create model GuestbookMapperzf create model Guestbookzf create controller Guestbook
然后再编辑GuestbookController,index.phtml(view层)运行结果:

5、Create A Form创建表单表单主要用来提交数据的。5.1使用zf来创建一个空的表单类。cmd:zf create form Guestbook会在application/forms/ 文件夹中新增Guestbook.php5.2编辑代码class Application_Form_Guestbook extends Zend_Form{ publicfunction init() { // Set the method for thedisplay form to POST $this->setMethod('post'); // Add an email element $this->addElement('text', 'email',array( 'label' => 'Your email address:', 'required' =>true, 'filters' => array('StringTrim'), 'validators' => array( 'EmailAddress', ) ));//下面创建其它字段。。。。。。。// 添加CSRF(Cross-site RequestForgery)保护,防止跨脚本攻击。 $this->addElement('hash', 'csrf',array( 'ignore' => true, ));5.3创建一动作来处理提交的表单数据。cmd:zf create action sign Guestbook该命令会给已存在GuestbookController类添加一动作signAction,还有一个相应的view,sign.phtml5.4给动作signAction添加处理代码:public function signAction() { $request =$this->getRequest(); $form = new Application_Form_Guestbook(); if($this->getRequest()->isPost()){ if($form->isValid($request->getPost())){ $comment =newApplication_Model_Guestbook($form->getValues()); $mapper= new Application_Model_GuestbookMapper(); $mapper->save($comment); return$this->_helper->redirector('index'); } } $this->view->form =$form; }5.5打开application/views/scripts/guestbook/sign.phtml,编写代码,显示表单。Please use the form below to sign our guestbook!<?php$this->form->setAction($this->url());echo $this->form;5.6通过地址直接访问该表单。http://localhost/guestbook/sign
6、Congratulations!到此,该教程算是完结了。虽然一个简单的guestbook要花MVC来做感觉是太绕了。但用MVC能获得更好的扩展,也把几个影响重用的关键点给解耦了。ZF还默认带了不少demo供学习,可进一步研读。

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/168888.html

更多阅读

中小学教师职业道德规范学习笔记

中小学教师职业道德规范学习笔记一、依法执教。学习和宣传马列主义、毛泽东思想和邓--同志建设有中国特色社会主义理论,拥护党的基本路线,全面贯彻国家教育方针,自觉遵守《教师法》等法律法规,在教育教学中同党和国家的方针政策保持一

西班牙语入门学习,语音学习

西班牙语入门学习,语音学习——简介西班牙语好入门,入门快吗?学任何一门语言,毫无疑问都是从字母发音还是学的。西班牙的一共有27个字母,令人高兴的是,一个字母只有一个发音,所以大家学起来相当的容易。至于很多学员头疼的大舌音,其实大家

伤寒学习笔记(下

伤寒学习笔记---14,桂枝用量问题?学习仲景药法,涉及用量问题。深入考证,固然不必,简单了解,实属必要。仅以桂枝为例,整理如下:基本资料:《现代中医药应用与研究大系》1985年版,简称《大系》。药法:凡例里说:“将其折合今之用量---,并结合笔者临床

声明:《ZF快速入门——学习笔记》为网友束缚花分享!如侵犯到您的合法权益请联系我们删除