在我们开始之前,让我们思考这样一些问题:这些类将放在什么地方,我们如何找到他们?我们创建的默认项目实例化一个自动加载器(autoloader)。我们可以把其他的自动加载器附加到它身上,这样它知道到哪里找到不同的类。典型的,我们想让我们大量的 MVC 类在同一个树状结构下分组--在本例中,是 application/--而且大部分情况使用一个通用前缀。
Zend_Controller_Front 有一个模块(modules)的理念,这些模块是独立的迷你应用程序。模块模仿 zf 工具在 application/ 下建立的目录结构,而且在它们(模块)内部的类被假设以一个通用前缀(模块的名字)开头。application/ 本身是一个模块--默认(default)或者应用(application)模块。这样,我们想为在这个目录内的资源创建自动加载。
Zend_Application_Module_Autoloader 提供了必要的功能来把一个模块下大量的资源映射到合适的目录,同时提供了一套标准的命名机制。类的一个实例将在 bootstrap 对象初始化的过程中被默认创建,你的应用程序的 bootstrap 将会默认的使用模块前缀 Application。这样,我们的模型,表单以及表格类将会以 Application 这个类前缀开头。
现在,让我们想一下什么组成了一个留言本。典型的,他们是一些简单的列表,包含有留言,时间,同时,经常的,电子邮件地址。假设我们把它们存储在一个数据库中,我们可能还想为每一个条目分配一个独一无二的标识符(unique identifier)。我们可能还希望可以保存每一个条目,捕获每一个条目,同时检索所有的条目。这样,一个简单的留言本模型 API 可能看起来是这样的:
__get() 和 set__() 将为我们访问独立的列表的属性提供一个方便的机制,同时代理其它的 getter 和 setter。他们同样将帮助确保只有列入我们白名单的属性才能被对象使用。
find() 和 fetch() 提供了捕获一个单独的条目或者全部条目的功能,而 save() 则负责把一个条目保存到数据库中。
从现在开始,我们可开始考虑建立我们的数据库。
首先,我们需要初始化我们的 Db 资源。如同 Layout 和 View 资源,我们可以为 Db 资源提供配置。我们可以使用 zf configure db-adapter 命令来完成:
% zf configure db-adapter /
> 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' /
> production
A db configuration for the production has been written to the application config file.
% zf configure db-adapter /
> 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-testing.db"' /
> testing
A db configuration for the production has been written to the application config file.
% zf configure db-adapter /
> 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-dev.db"' /
> development
A db configuration for the production has been written to the application config file.
现在编辑你的 application/configs/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"
最后你的配置文件看起来应该是这样的:
; application/configs/application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view[] =
resources.db.adapter = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.adapter = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.adapter = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
注意数据库将会保存在 data/db/ 中。创建那些目录,同时使它们可写。在 unix 系统中,你可以这样做:
% mkdir -p data/db; chmod -R a+rwX data
在 Windows,你将在文件浏览器中创建这些目录,并设置权限,让任何人都可以写入这个目录。
至此,我们有了一个到数据库的连接,在我们的例子中,这是一个到位于我们 application/data 目录中的一个 Sqlite 数据库的链接。所以,让我们设计一个简单的表格来保存我们的留言本条目。
同时,为了我们能有一些可以操作的数据,让我们创建一些信息来使我们的应用程序更有趣。
现在我们同时定义好了结构和一些数据。让我们创建一个脚本以便我们可以执行从而创建这个数据库。本来,这个在产品中不是必须的,但是这个脚本将帮助开发者创建本地数据库,以便他们拥有全套的工作应用程序。用以下的内容创建 scripts/load.sqlite.php 脚本:
现在我们的留言本应用程序有了一整套运转正常的数据库和表格。下面的几个步骤将创建我们的应用程序代码。包括创建一个数据源(在我们的例子中,我们将使用 Zend_Db_Table),和一个数据映射器来把数据源链接到我们的模型。最后我们还将创建控制器,来和这个模型互动,以便显示存在的条目,同时加入新的条目。
我们将使用一个 Table Data Gateway 来链接到我们的数据源;Zend_Db_Table 提供了这个功能。开始之前,让我们创建一个以 Zend_Db_Table 为基础的表格类。正如我们在 layout 和 database adapter 做的,我们可以使用 zf 工具来帮助我们,使用 create db-table 命令。它将接受至少两个参数,你想指向的类的名字,和它映射的数据库表格。
% zf create db-table Guestbook guestbook
Creating a DbTable at application/models/DbTable/Guestbook.php
Updating project profile 'zfproject.xml'
看看你的目录树,你将会发现一个新目录, application/models/DbTable 被创建了,同时还有 Guestbook.php 文件。如果你打开那个文件,你会看到如下内容:
注意类的前缀:Application_Model_DbTable。我们模块的类前缀,Application_,是第一个部分,然后是我们的组件,Model_DbTable;后面的部分是被映射到模块的 models/DbTable 目录。
当扩展 Zend_Db_Table 的时候,所需要提供的只是一个表格的名字,以及一个可选择的 primary key (如果它不是 id)。
现在让我们创建一个 Data Mapper。一个 Data Mapper 把一个对象映射到数据库。在我们的例子中,它将映射我们的模型,Application_Model_Guestbook,到我们的数据源,Application_Model_DbTable_Guestbook。一个典型的数据映射器(data mapper)的 API 将会是这样的:
除了这些方法,我们将增加设置和检索 Table Data Gateway 的方法。为了创建最原始的类,使用 zf 客户工具:
% zf create model GuestbookMapper
Creating a model at application/models/GuestbookMapper.php
Updating project profile '.zfproject.xml'
现在,编辑在 application/models/GuestbookMapper.php 文件中的 Application_Model_GuestbookMapper 类,将会看到以下内容:
现在是时候创建我们的模型类了。我们可以,再次的,使用 zf create model 命令
% zf create model Guestbook
Creating a model at application/models/Guestbook.php
Updating project profile '.zfproject.xml'
我们会修改这个空的 PHP 类,通过传递一个数据数组给构造函数或者一个 setOptions() 方法,来使它简单的填充这个模型。最后的模型类,在 application/models/Guestbook.php 文件中,看起来象这样:
最后,为了把这些元素链接起来,让我们创建一个 guestbook 控制器,它将列出数据库中现有的条目,同时可以添加新的条目进数据库。
为了创建一个新的控制器,使用 zf create controller 命令:
% zf create controller Guestbook
Creating a controller at
application/controllers/GuestbookController.php
Creating an index action method in controller Guestbook
Creating a view script for the index action method at
application/views/scripts/guestbook/index.phtml
Creating a controller test file at
tests/application/controllers/GuestbookControllerTest.php
Updating project profile '.zfproject.xml'
这将创建一个新控制器,GuestbookController,在 application/controllers/GuestbookController.php 文件中,带有一个单独的行为方法,indexAction()。它同时为这个控制器创建一个视图脚本目录, application/views/scripts/guestbook/,内有与这个 index 行为相对应的视图脚本。
我们使用 index 行为作为一个登陆页面来浏览留言本条目。
现在,让我们更新基本的应用程序逻辑。对于一个 indexAction() 的点击,我们将显示全部的留言本条目。它看起来是这样的:
同时,当然,我们需要一个视图脚本。修改 application/views/scripts/guestbook/index.phtml,如下显示:
注意:检查
现在浏览 http://localhost/guestbook,在你的浏览器中你应该能看到如下内容:
分享到:
相关推荐
RAR是一种常见的文件压缩格式,由WinRAR软件创建,允许用户将多个文件和文件夹压缩到一个单一的可下载包中,以便于存储和传输。 描述中的"synergy1.10.1"进一步证实了这是一个名为Synergy的软件的特定版本。Synergy...
1. **分层结构**:HDF5允许用户创建一个层次化的数据结构,类似于文件系统的目录结构,可以方便地组织和管理大量数据。 2. **自描述性**:每个数据对象都包含关于其自身的信息,如数据类型、形状和存储位置,这使得...
总结一下,"poco-1.10.1-all-src-dll.zip"是一个包含Poco库1.10.1版本源码和64位动态库的综合资源,适合于需要了解Poco内部实现、进行定制开发或快速集成到Windows项目中的开发者。通过深入研究和使用这个资源,我们...
libzip是一个开源的C库,专门用于处理ZIP档案文件。它提供了创建、读取、修改和删除ZIP档案的功能,广泛应用于软件开发,特别是在需要对ZIP文件进行低级别操作的场景下。libzip库在1.10.1版本中引入了多项改进和新...
赠送jar包:parquet-column-1.10.1.jar; 赠送原API文档:parquet-column-1.10.1-javadoc.jar; 赠送源代码:parquet-column-1.10.1-sources.jar; 赠送Maven依赖信息文件:parquet-column-1.10.1.pom; 包含翻译后...
SVN1.10.1是Subversion的一个特定版本,包含了若干增强和改进,确保了更稳定和高效的工作流程。 TortoiseSVN是一款与Windows操作系统集成的SVN客户端,其1.10.1版本对应于SVN1.10.1。这个客户端提供了图形化的界面...
1.10.1是SVN的一个特定版本,可能包含了一些bug修复、性能提升或者新功能。 "svn 1.10.1"指的是SVN的1.10.1版本。这个版本可能引入了新的特性和改进,以增强用户的工作效率和系统稳定性。例如,可能会有更优化的...
libpcap-1.10.1是libpcap的一个稳定版本,包含了多项改进和修复。这些更新可能包括增强的性能、新的API功能、错误修复以及对新硬件或协议的支持。 **三、源码安装步骤** 1. **环境准备**:确保系统已经安装了必要...
总结,jQuery UI 1.10.1 是一个强大的前端开发工具,提供了多种UI组件和自定义选项,能够帮助开发者快速构建功能丰富的交互式用户界面。通过理解其核心特性、组件和自定义方法,开发者可以更好地利用这一库来提升...
Heritrix 1.10.1是该系列的一个版本,可能包含了在1.10系列中的一些特定改进和修复。 Heritrix的核心概念是模块化。它由一系列相互协作的组件构成,这些组件包括抓取策略、解析器、存储器和过滤器等。这种设计使得...
赠送jar包:parquet-hadoop-1.10.1.jar 赠送原API文档:parquet-hadoop-1.10.1-javadoc.jar 赠送源代码:parquet-hadoop-1.10.1-sources.jar 包含翻译后的API文档:parquet-hadoop-1.10.1-javadoc-API文档-中文...
Apache Flink 是一个开源的流处理和批处理框架,它以其高性能、低延迟以及对实时数据流处理的强大支持而备受关注。Flink 1.10.1 版本的发布,进一步提升了系统的稳定性和易用性,为开发者提供了更多优化的功能。 在...
《jQuery UI 1.10.1:构建交互式网页的强大工具》 jQuery UI 是一个基于 jQuery JavaScript 库的开源项目,它提供了丰富的用户界面组件和交互效果,为开发者提供了构建功能丰富的、交互性强的网页应用的强大支持。...
在实际应用中,PyVISA的使用流程通常是这样的:首先,创建一个资源管理器对象,然后使用该对象搜索并连接到目标设备。接着,通过发送特定的SCPI命令进行设备配置和数据采集。最后,关闭连接,结束通信。PyVISA的API...
《Apache Flink 1.10.1:流处理与批处理框架的深入解析》 Apache Flink 是一个开源的流处理和批处理框架,它以其高性能、低延迟以及对实时数据流处理的强大支持而备受关注。Flink 1.10.1 版本是该框架的一个稳定...
Apache Ant 是一个强大的构建工具,由Apache软件基金会开发并维护,它主要被用于Java项目构建。这个"apache-ant-1.10.1"压缩包包含的是Ant的1.10.1版本,它是对早期版本的更新,提供了一系列改进和新特性。 Ant的...
标题中的"flink-1.10.1-bin-scala_2.12.tgz.zip"标识了这是一个Apache Flink的特定版本安装包,版本号为1.10.1,且是针对Scala 2.12编译的二进制发行版。Flink是一个开源的流处理和批处理框架,广泛应用于大数据处理...
标题“GDAL-1.10.1_C#专用dll”和描述中提到的“修改了错误代码,解决了安全透明代码问题,C#专用,Gdal-1.10.1”都涉及到一个核心概念——GDAL库在C#环境中的使用。GDAL,全称Geospatial Data Abstraction Library...