Zend+Framework2的程序员参考指南+.doc_第1页
Zend+Framework2的程序员参考指南+.doc_第2页
Zend+Framework2的程序员参考指南+.doc_第3页
Zend+Framework2的程序员参考指南+.doc_第4页
Zend+Framework2的程序员参考指南+.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

Zend Framework的程序员参考指南 一,概述Zend Framework 2是一个开源框架,用于开发Web应用程序和服务使用PHP 5.3以上版本。Zend Framework中使用100的面向对象的代码,并利用PHP 5.3,即命名空间,延迟静态绑定,lambda函数和关闭大部分的新功能 。 Zend Framework 2 是在被成功下载1500万次的Zend Framework 基础上开发出来的。Zend Framework的组件结构是独一无二的,每个组件的设计与一些依赖于其他组件。ZF2遵循坚实的面向对象的设计原则。这种松散耦合的体系结构允许开发人员使用任何他们想要的组件。我们称之为“随意使用”的设计。我们支持梨和作曲者作为一个整体的框架,并为每个组件的安装和依赖跟踪机制,进一步增强了这种设计。 我们使用PHPUnit的测试我们的代码和特拉维斯CI持续集成服务。 虽然它们可以单独使用,Zend Framework的2个部分组成一个强大的和可扩展的Web应用程序框架标准库中的形式相结合。此外,它提供了一个强大的,高性能的MVC实现方式,是简单易用的数据库抽象,和表单组件实现HTML5的形式呈现,验证和过滤,使开发人员可以使用一个易于整合所有这些操作使用面向对象的接口。其他组件,如Zend的身份验证和 Zend的权限 ACL的所有常见的凭据存储,提供用户身份验证和授权。还有一些人,的Zend Service命名空间,实现客户端库来简化访问最流行 的Web服务。无论您的应用需求,你可能会发现一个Zend Framework组件,可用于一个彻底的测试基础,大大缩短了开发时间。该项目的Zend框架的主要赞助商2是Zend Technologies的,但许多公司都提供组件或重大功能的框架。如谷歌,微软和Strike Iron公司与Zend合作,他们希望和Zend Framework 2开发人员提供的网络服务及其它技术提供接口。Zend框架不能没有充满活力的Zend Framework的2个社区的帮助下,交付和支持所有这些功能。社区成员包括贡献者,使自己的邮件列表, IRC频道和其他论坛。你有什么问题关于Zend框架2,社会总是可以解决这个问题。二,安装Zend框架? 下载最新的稳定版本。可提供的。zip和。的tar.gz格式。勇敢,尖端Zend Framework的Git仓库中使用Git的客户端的 下载。Zend Framework是开源软件,用于其开发的Git仓库可在GitHub上公开。请考虑使用Git如果你想贡献的框架Zend Framework的,或者需要升级你的框架版本往往比版本出现。一旦你有一个可用Zend Framework的副本,您的应用程序需要能够访问框架的类的库文件夹中找到。有几种方法来实现这一点。未能找到一个Zend Framework 2安装,会出现以下错误:没有正确答复或连接的主机没有反应,连接错误:未捕获的Runtime Exception的“例外”与“无法加载ZF2。运行PHP composer.phar安装“或定义一个ZF2_PATH环境变量“。为了解决这个问题,你可以添加Zend Framework的库路径PHP 的include_path。此外,你应该设置一个环境路径名为“ZF2_PATH的在httpd.conf(或同等学历)。即 目录SetEnvZF2_PATH / var/ZF2运行Linux操作系统。罗布艾伦请提供一个入门教程与社会,入门Zend框架2。其他的Zend Framework的社区成员正在积极努力扩大本教程。三,Zend framework 2.0 入门本教程的目的是向大家介绍使用Zend Framework 2,通过创建一个简单的数据库驱动的应用程序使用模型 - 视图 - 控制器模式。年底,你将有一个工作ZF2的应用程序,你可以再戳的代码周围找到更多关于它是如何工作结合在一起的。 :本教程假定您正在运行的是PHP 5.3.3与Apache Web服务器和MySQL,可以通过PDO扩展。必须有mod_rewrite扩展安装和配置Apache安装。此外,还必须保证Apache配置为支持的。htaccess文件。这通常是通过改变设置:AllowOverride None设置为AllowOverride FileInfo在你的httpd.conf文件。具体细节,请与您的发行版本的文档。您将无法浏览到在本教程的主页以外的任何页面,如果你还没有配置的mod_rewrite和正确的。htaccess使用。 我们要建立的应用程序是一个简单的库存系统 ,用来展示我们拥有的albums。主页面用来列出我们的收藏和albums,以便于CDs的增删改。在我们的站点上需要如下四个页面:页面描述Albums列表用来展示albums列表,并提供用于增加,修改,删除的链接。添加albums此页面提供一个用来添加albums的表单。编辑albums此页面提供一个用来编辑修改albums的表单。删除albums此页面用于我们选择并确认删除albums。我们还需要我们的数据存储到数据库中。我们只需要一个有以下字段的数据库表;字段名字段类型允许为空?注解idintegerNo主键, 自增artistvarchar(100)No titlevarchar(100)No 四,应用程序框架入门为了构建我们的应用程序, 我们应该从 github 上下载可用的ZendSkeletonApplication(zend应用程序框架)。使用Composer()与Zend框架从头开始创建一个新的项目: php composer.phar create-project -repository-url= zendframework/skeleton-application path/to/install注意 另一种方法安装ZendSkeletonApplication是使用GitHub。转到/zendframework/ZendSkeletonApplication,然后单击“zip”按钮。这将下载的文件一样的zendframework - ZendSkeletonApplication zfrelease-2.0.0beta5-2-gc2c7315.zip或类似的名称 。将此文件解压缩到该目录下,你可以将你所有的虚拟主机,并重新命名所得到的目录ZF2教程。ZendSkeletonApplication被设置为使用作曲家(),以解决其依赖关系。在这种情况下,依赖关系是:Zend框架2本身。要安装Zend Framework的2到我们的应用程序,我们只需键入:php composer.phar self-updatephp composer.phar install从ZF2教程文件夹安装。这需要一段时间。您应该会看到如下的输出:Installing dependencies from lock file- Installing zendframework/zendframework (dev-master) Cloning 18c8e223f070deb07c17543ed938b54542aa0ed8Generating autoload files注意 如果你看到这条消息:RuntimeException The process timed out.那么你的连接速度太慢导致下载整个安装包失败,和Composer链接超时。为了避免此现象,可以将以下运行:php composer.phar install改为:COMPOSER_PROCESS_TIMEOUT=5000 php composer.phar install现在,我们可以进入到虚拟主机。 虚拟主机你现在需要为此应用创建一个apache虚拟主机,并编辑你的主机文件夹以便于 http:/zf2-tutorial.localhost 可以指向 zf2-tutorial/public 位置下的index.php 。设置虚拟主机通常是在httpd.conf中或 添加到extra / httpd-vhosts.conf中。如果您使用的httpd-vhosts.conf,请确保该文件包含主要的httpd.conf文件。一些Linux发行版(例如:Ubuntu的)包Apache的配置文件都存储在/ etc/apache2 每个虚拟主机里面的文件夹中创建一个文件/ etc/apache2/sites-enabled。在这种情况下,你会在下面的虚拟主机块到文件 / etc/apache2/sites-enabled/zf2-tutorial的。 确保NameVirtualHost定义和设置为“* 80”或类似的,然后再沿着这些线路,定义虚拟主机: ServerName zf2-tutorial.localhost DocumentRoot /path/to/zf2-tutorial/public SetEnv APPLICATION_ENV development DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all 请确保您更新您的/ etc / hosts文件C: WINDOWS SYSTEM32 驱动程序等主机文件,使ZF2-tutorial.localhost 映射到。该网站可以被访问使用 http:/zf2-tutorial.localhost。 ZF2-tutorial.localhost本地的重新启动您的Web服务器。如果你的操作正确,那么你应该看到这样的事情: 为了测试.htaccess 文件是否正常运行,进入 http:/zf2-tutorial.localhost/1234 你会看到如下:如果在这里你看到的是一个标准的apache 404 error,那么在你将要继续使用框架之前需要修复.htaccess 规范。如果你使用的是IIS URL重写模块,导入以下内容: RewriteCondREQUEST_FILENAME!-F 的RewriteRule * $的index.php NC,L现在,你已经得到了一个正常运行的应用框架,并可以开始添加自己的应用了。五,单元测试一个固态组件测试套件在持续发展的大项目中是必不可少的,对于某一部分人群来说更是如此。每出现一个变动,都要回去手动测试该应用的每一个独立组件是不现实的。在这里,您的单元测试将通过自动测试应用组件来缓解这个情况,并且当您编写测试的时候导致一些组件工作不正常时提醒您。Zend Framework 2 API是使用PHPUnit的,这个应用程序教程也是如此。单元测试的详细说明超出了本文的讨论范围,所以我们将在接下来的页面中,只提供样品测试的组件。本教程是基于已经安装了PHPUnit使用者。设置测试目录 首先在zf2-tutorialmoduleApplication 下创建一个叫做test的目录,并包含如下子目录:zf2-tutorial/ /module /Application /test /ApplicationTest /Controller测试目录的结构完全匹配模块的源文件, 它可以确保你的测试组织良好,并且很容易找到。 引导您的测试接下来 在zf2-tutorial/module/Application/test 下,创建一个名为phpunit.xml.dist 的文件。 ./ApplicationTest 一个名为Bootstrap.php 的文件,同样安置在 zf-tutorial/module/Application/test下,这是由Evan Coury 编写的一个引导,仅用于drop in,只需要修改一个namespace 。 array( module_paths = explode(PATH_SEPARATOR, $zf2ModulePaths), ), ); $config = ArrayUtils:merge($baseConfig, $testConfig); $serviceManager = new ServiceManager(new ServiceManagerConfig(); $serviceManager-setService(ApplicationConfig, $config); $serviceManager-get(ModuleManager)-loadModules(); static:$serviceManager = $serviceManager; static:$config = $config; public static function getServiceManager() return static:$serviceManager; public static function getConfig() return static:$config; protected static function initAutoloader() $vendorPath = static:findParentPath(vendor); if (is_readable($vendorPath . /autoload.php) $loader = include $vendorPath . /autoload.php; else $zf2Path = getenv(ZF2_PATH) ?: (defined(ZF2_PATH) ? ZF2_PATH : (is_dir($vendorPath . /ZF2/library) ? $vendorPath . /ZF2/library : false); if (!$zf2Path) throw new RuntimeException(Unable to load ZF2. Run php composer.phar install or define a ZF2_PATH environment variable.); include $zf2Path . /Zend/Loader/AutoloaderFactory.php; AutoloaderFactory:factory(array( ZendLoaderStandardAutoloader = array( autoregister_zf = true, namespaces = array( _NAMESPACE_ = _DIR_ . / . _NAMESPACE_, ), ), ); protected static function findParentPath($path) $dir = _DIR_; $previousDir = .; while (!is_dir($dir . / . $path) $dir = dirname($dir); if ($previousDir = $dir) return false; $previousDir = $dir; return $dir . / . $path; Bootstrap:init();一个称为TestConfig.php.dist的文件 array( Application, ), module_listener_options = array( config_glob_paths = array( ./././config/autoload/,*.global,local.php, ), module_paths = array( module, vendor, ), ),);这个文件与config/application.config.php 文件基本一致,不一样的是我们只定义了测试所需的modules。你的第一个控制器的测试接下来,在zf-tutorial/module/Application/test/ApplicationTest/Controller 下创建IndexControllerTest.php,包含一下内容:controller = new IndexController(); $this-request = new Request(); $this-routeMatch = new RouteMatch(array(controller = index); $this-event = new MvcEvent(); $config = $serviceManager-get(Config); $routerConfig = isset($configrouter) ? $configrouter : array(); $router = HttpRouter:factory($routerConfig); $this-event-setRouter($router); $this-event-setRouteMatch($this-routeMatch); $this-controller-setEvent($this-event); $this-controller-setServiceLocator($serviceManager); 在这里,我们扩展一些引于Tom Oram的一篇名为ZF2控制器的单元测试的博客上的内容。 主要关于通过setUp() 方法来将我们的项目初始化并且直接在控制器上设置的(事件管理器)EventManager和服务定位器 (ServiceLocator) 。这一点,对于我们现在来说不是很重要,但是我们在编辑其他更高端的测试时很必要。现在,添加下面的函数到类的IndexControllerTest: public function testIndexActionCanBeAccessed() $this-routeMatch-setParam(action, index); $result = $this-controller-dispatch($this-request); $response = $this-controller-getResponse(); $this-assertEquals(200, $response-getStatusCode();此测试是为了验证首页响应HTTP状态码200 和控制器的返回值的。是位于ZendViewModelViewModel 下的一个实例。测试 进入zf-tutorial/module/Application/test/ 并运行phpunit ,如果能出现以下内容,那么你的应用程序已经可以适用于更多的测试了。PHPUnit 3.5.15 by Sebastian Bergmann.Time: 0 seconds, Memory: 5.75MbOK (1 test, 2 assertions)五,模块Zend Framework 2 使用模块系统,并且你需要在每一个模块中编辑你主要的应用程序代码。每个模块内。骨架所提供的应用模块是用来提供自举,错误和路由配置的整个应用程序。它通常是用来提供应用层控制,也就是说,应用程序的主页,但我们不打算在本教程中使用默认的,因为我们希望我们的专辑列表的主页,这将住在我们自己的模块。我们到相册模块,该模块将包含我们的控制器,模型,表格和视图,以及配置,打算把我们所有的代码。我们也将调整应用程序模块的要求。让我们开始与所需的目录。设置相册模块首先,创建一个目录称为相册模块具有以下子目录下按住模块的文件: zf2-tutorial/ /module /Album /config /src /Album /Controller /Form /Model /view /album /album正如你可以看到相册模块有不同类型的文件,我们将有独立的目录。PHP文件,其中包含类的的专辑命名空间内 生活中的src /专辑目录中,这样我们就可以有多个命名空间,我们应该在我们的模块需要它。view目录中也有所谓的专辑,我们的模块的视图脚本的子文件夹。为了加载和配置模块,Zend Framework的2 ModuleManager会。这将寻找Module.php的模块目录的根(模块/专辑),并期望找到一类被称为专辑模块 内。这是在给定的模块,类模块的名称,这是目录中的模块名称的命名空间。创建Module.php在相册模块:创建一个文件称为Module.php下zf2-tutorial/module/Album: array( _DIR_ . /autoload_classmap.php, ), ZendLoaderStandardAutoloader = array( namespaces = array( _NAMESPACE_ = _DIR_ . /src/ . _NAMESPACE_, ), ), ); public function getConfig() return include _DIR_ . /config/module.config.php; 模块管理器(ModuleManager )将会自动调用getAutoloaderConfig() and getConfig() 方法。自动加载文件我们的getAutoloaderConfig()方法返回一个数组,用来兼容ZF2的AutoloaderFactory。我们配置它,以便我们将class map 文件添加到ClassmapAutoloader ,还可以将这个模块的命名空间添加至StandardAutoloader。标准的自动加载需要一个命名空间和可以找到该命名空间文件的路径。这样做是为了兼容PSR-0标准,因此classes map 可以直接映射到每一条PSR-0规则对应的文件。当我们在项目开发中,我们并不需要通过classmap来加载文件,因此我们为classmap的自动加载机制提供了一个空的数组 。在zf2-tutorial/module/Album 下创建一个autoload_classmap.php文件:?phpreturn array();由于这是一个空数组,当自动加载机制在album命名空间内搜索一个类的时候 ,它将退回到我们StandardAutoloader。 配置注册完autoloader之后,我们来简单了解一下在AlbumModule 下的getConfig() 方法。这种方法简单的加载了 config / module.config.php文件。在zf2-tutorial/module/Album/config 下,创建一个module.config.php 文件: array( invokables = array( AlbumControllerAlbum = AlbumControllerAlbumController, ), ), view_manager = array( template_path_stack = array( album = _DIR_ . /./view, ), ),);配置信息传递给相关组件的 ServiceManager的。我们需要两个最初部分:控制器和view_manager。控制器部分提供了一个列表中的所有控制器模块提供。我们都需要一个的控制器,AlbumController,我们将专辑控制器相册引用。控制器键必须是唯一的所有模块,所以我们前缀它与我们的模块名称。内view_manager部分,我们认为目录的 TemplatePathStack配置。这将允许它找到的相册模块中存储的视图/目录视图脚本。将新模块告知给应用程序现在我们需要告知模块管理器(ModuleManager )我们已经生成了一个新的模块。这一步骤我们需要在应用程序框架提供给我们的config/application.config.php 内完成。更新此文件,使该模块部分同样包含我们新建的Album 模块,内容如下:(改变部分高亮显示) array( Application, Album, / array( config_glob_paths = array( config/autoload/,*.global,local.php, ), module_paths = array( ./module, ./vendor, ), ),);正如你可以看到 ,我们已经增加了我们的相册模块插入后的应用程序模块的模块列表。我们现在已经准备把我们的自定义代码的模块。六, 路由和控制器接下来我们需要建立一个简易的存储系统来展示我们的album。主页将列出我们的album并允许允许我们添加、编辑和删除album。因此页面需要有以下要求: 页面描述首页此页面用来显示album列表,并提供链接到编辑和删除它们。同样,一个链接来启用添加新专辑将被提供。 添加新的album这个页面将提供一个表单添加新album。 编辑 album这个页面将提供一个表单编辑新album。 删除 album这个页面将提供一个表单删除新album。 在我们建立文件之前,重要的是要了解如何设计页面框架的组织结构。每个页面的应用程序被称为一个动作和行为被分组到控制器模块内。因此,你通常会组织相关的动作控制器;例如,一个新闻控制器可能动作的电流,存档和视图。 当我们创建完适用于以上四个功能的页面后,我们将它们分组在一个包含有以上四个动作模块的控制器AlbumController中。这四个动作是:PageControllerAction主页AlbumControllerindex添加新的albumAlbumControlleradd编辑 albumAlbumControlleredit删除 albumAlbumControllerdelete映射一个URL来完成特定的动作使用路线中定义的模块的模块配置。php文件。我们将添加一个路线为相册的行动。这是更新的模块配置文件与新代码高亮显示。 array( invokables = array( AlbumControllerAlbum = AlbumControllerAlbumController, ), ), / The following section is new and should be added to your file router = array( routes = array( album = array( type = segment, options = array( route = /album/:action/:id, constraints = array( action = a-zA-Za-zA-Z0-9_-*, id = 0-9+, ), defaults = array( controller = AlbumControllerAlbum, action = index, ), ), ), ), ), view_manager = array( template_path_stack = array( album = _DIR_ . /./view, ), ),);路线的名为“album”“segment”类型。 段路线允许我们指定URL模式中的占位符(路线),将被映射到命名参数的匹配路径。在这种情况下,路线是“/专辑/:行动/:id“这将匹配任何URL,始于/专辑。接下来的部分将是一个可选的动作名称,然后最后第二段将被映射到一个可选的id。方括号表明,一段是可选的。约束部分允许我们确保角色在一段如预期,所以我们有有限的行动从一个字母,然后后续字符字母数字,只强调或连字符。我们还限制了id号码。 这个路由需要我们建立以下地址: URLPageAction/albumHome (list of albums)index/album/addAdd new albumadd/album/edit/2Edit album with an id of 2edit/album/delete/4Delete album with an id of 4delete创建控制器我们现在已经准备好建立我们的控制器。在Zend Framework 2,控制器是一个类通常被称为控制器 名控制器。需要注意的是 控制器 名必须以大写字母开始。这一类住在一个名为一下,Controller name Controller.php这样在控制器模块的目录。在本例中,模块/专辑/ src目录/专辑/控制器。每一个行动是在控制器类的公共方法被命名为动作 名称操作。行动 在这种情况下,应该开始用小写字母。 让我们继续创建我们的的控制器类AlbumController.php在zf2-tutorials/module/Album/src/Album/Controller: ?phpnamespace AlbumController;use ZendMvcControllerAbstractActionController;use ZendViewModelViewModel;class AlbumController extends AbstractActionController public function indexAction() public function addAction() public function editAction() public function deleteAction() 我们现在已经建立了,我们要使用的四个动作。他们不会工作,直到我们的意见。每一个动作的网址是: URL调用此方法http:/zf2-tutorial.localhost/albumAlbumControllerAlbumController:indexAction http:/zf2-tutorial.localhost/album/addAlbumControllerAlbumController:addAction http:/zf

温馨提示

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

评论

0/150

提交评论