- 浏览: 35724 次
- 性别:
- 来自: 安徽省
-
最近访客 更多访客>>
文章分类
最新评论
-
Neao:
不错,确实是这样,非常感谢。
在下补充一下安装过程中可能出 ...
源码安装Mysql,补装innodb引擎方法
在我们开始之前,让我们思考这样一些问题:这些类将放在什么地方,我们如何找到他们?我们创建的默认项目实例化一个自动加载器(autoloader)。我们可以把其他的自动加载器附加到它身上,这样它知道到哪里找到不同的类。典型的,我们想让我们大量的 MVC 类在同一个树状结构下分组--在本例中,是 application/--而且大部分情况使用一个通用前缀。
Zend_Controller_Front 有一个模块(modules)的理念,这些模块是独立的迷你应用程序。模块模仿 zf 工具在 application/ 下建立的目录结构,而且在它们(模块)内部的类被假设以一个通用前缀(模块的名字)开头。application/ 本身是一个模块--默认(default)或者应用(application)模块。这样,我们想为在这个目录内的资源创建自动加载。
Zend_Application_Module_Autoloader 提供了必要的功能来把一个模块下大量的资源映射到合适的目录,同时提供了一套标准的命名机制。类的一个实例将在 bootstrap 对象初始化的过程中被默认创建,你的应用程序的 bootstrap 将会默认的使用模块前缀 Application。这样,我们的模型,表单以及表格类将会以 Application 这个类前缀开头。
现在,让我们想一下什么组成了一个留言本。典型的,他们是一些简单的列表,包含有留言,时间,同时,经常的,电子邮件地址。假设我们把它们存储在一个数据库中,我们可能还想为每一个条目分配一个独一无二的标识符(unique identifier)。我们可能还希望可以保存每一个条目,捕获每一个条目,同时检索所有的条目。这样,一个简单的留言本模型 API 可能看起来是这样的:
- // application/models/Guestbook.php
- class Application_Model_Guestbook
- {
- protected $_comment;
- protected $_created;
- protected $_email;
- protected $_id;
- public function __set($name, $value);
- public function __get($name);
- public function setComment($text);
- public function getComment();
- public function setEmail($email);
- public function getEmail();
- public function setCreated($ts);
- public function getCreated();
- public function setId($id);
- public function getId();
- }
- class Application_Model_GuestbookMapper
- {
- public function save(Application_Model_Guestbook $guestbook);
- public function find($id);
- public function fetchAll();
- }
__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/schema.sqlite.sql
- --
- -- You will need load your database schema with this SQL.
- CREATE TABLE guestbook (
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- email VARCHAR(32) NOT NULL DEFAULT 'noemail@test.com',
- comment TEXT NULL,
- created DATETIME NOT NULL
- );
- CREATE INDEX "id" ON "guestbook" ("id");
同时,为了我们能有一些可以操作的数据,让我们创建一些信息来使我们的应用程序更有趣。
- -- scripts/data.sqlite.sql
- --
- -- You can begin populating the database with the following SQL statements.
- INSERT INTO guestbook (email, comment, created) VALUES
- ('ralph.schindler@zend.com',
- 'Hello! Hope you enjoy this sample zf application!',
- DATETIME('NOW'));
- INSERT INTO guestbook (email, comment, created) VALUES
- ('foo@bar.com',
- 'Baz baz baz, baz baz Baz baz baz - baz baz baz.',
- DATETIME('NOW'));
现在我们同时定义好了结构和一些数据。让我们创建一个脚本以便我们可以执行从而创建这个数据库。本来,这个在产品中不是必须的,但是这个脚本将帮助开发者创建本地数据库,以便他们拥有全套的工作应用程序。用以下的内容创建 scripts/load.sqlite.php 脚本:
- <?php
- // Initialize the application path and autoloading
- defined('APPLICATION_PATH')
- || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
- set_include_path(implode(PATH_SEPARATOR, array(
- APPLICATION_PATH . '/../library',
- get_include_path(),
- )));
- require_once 'Zend/Loader/Autoloader.php';
- Zend_Loader_Autoloader::getInstance();
- // Define some CLI options
- $getopt = new Zend_Console_Getopt(array(
- 'withdata|w' => 'Load database with sample data',
- 'env|e-s' => 'Application environment for which to create database (defaults to development)',
- 'help|h' => 'Help -- usage message',
- ));
- try {
- $getopt->parse();
- } catch (Zend_Console_Getopt_Exception $e) {
- // Bad options passed: report usage
- echo $e->getUsageMessage();
- return false;
- }
- // If help requested, report usage message
- if ($getopt->getOption('h')) {
- echo $getopt->getUsageMessage();
- return true;
- }
- // Initialize values based on presence or absence of CLI options
- $withData = $getopt->getOption('w');
- $env = $getopt->getOption('e');
- defined('APPLICATION_ENV')
- || define('APPLICATION_ENV', (null === $env) ? 'development' : $env);
- // Initialize Zend_Application
- $application = new Zend_Application(
- APPLICATION_ENV,
- APPLICATION_PATH . '/configs/application.ini'
- );
- // Initialize and retrieve DB resource
- $bootstrap = $application->getBootstrap();
- $bootstrap->bootstrap('db');
- $dbAdapter = $bootstrap->getResource('db');
- // let the user know whats going on (we are actually creating a
- // database here)
- if ('testing' != APPLICATION_ENV) {
- echo 'Writing Database Guestbook in (control-c to cancel): ' . PHP_EOL;
- for ($x = 5; $x > 0; $x--) {
- echo $x . "\r"; sleep(1);
- }
- }
- // Check to see if we have a database file already
- $options = $bootstrap->getOption('resources');
- $dbFile = $options['db']['params']['dbname'];
- if (file_exists($dbFile)) {
- unlink($dbFile);
- }
- // this block executes the actual statements that were loaded from
- // the schema file.
- try {
- $schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql');
- // use the connection directly to load sql in batches
- $dbAdapter->getConnection()->exec($schemaSql);
- chmod($dbFile, 0666);
- if ('testing' != APPLICATION_ENV) {
- echo PHP_EOL;
- echo 'Database Created';
- echo PHP_EOL;
- }
- if ($withData) {
- $dataSql = file_get_contents(dirname(__FILE__) . '/data.sqlite.sql');
- // use the connection directly to load sql in batches
- $dbAdapter->getConnection()->exec($dataSql);
- if ('testing' != APPLICATION_ENV) {
- echo 'Data Loaded.';
- echo PHP_EOL;
- }
- }
- } catch (Exception $e) {
- echo 'AN ERROR HAS OCCURED:' . PHP_EOL;
- echo $e->getMessage() . PHP_EOL;
- return false;
- }
- // generally speaking, this script will be run from the command line
- return true;
现在我们的留言本应用程序有了一整套运转正常的数据库和表格。下面的几个步骤将创建我们的应用程序代码。包括创建一个数据源(在我们的例子中,我们将使用 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/models/DbTable/Guestbook.php
- class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
- {
- protected $_name = 'guestbook';
- }
注意类的前缀: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 客户工具: 现在,编辑在 application/models/GuestbookMapper.php 文件中的 Application_Model_GuestbookMapper 类,将会看到以下内容: 现在是时候创建我们的模型类了。我们可以,再次的,使用 zf create model 命令 我们会修改这个空的 PHP 类,通过传递一个数据数组给构造函数或者一个 setOptions() 方法,来使它简单的填充这个模型。最后的模型类,在 application/models/Guestbook.php 文件中,看起来象这样: 最后,为了把这些元素链接起来,让我们创建一个 guestbook 控制器,它将列出数据库中现有的条目,同时可以添加新的条目进数据库。 为了创建一个新的控制器,使用 zf create controller 命令: 这将创建一个新控制器,GuestbookController,在 application/controllers/GuestbookController.php 文件中,带有一个单独的行为方法,indexAction()。它同时为这个控制器创建一个视图脚本目录, application/views/scripts/guestbook/,内有与这个 index 行为相对应的视图脚本。 我们使用 index 行为作为一个登陆页面来浏览留言本条目。 现在,让我们更新基本的应用程序逻辑。对于一个 indexAction() 的点击,我们将显示全部的留言本条目。它看起来是这样的: 同时,当然,我们需要一个视图脚本。修改 application/views/scripts/guestbook/index.phtml,如下显示: 现在浏览 http://localhost/guestbook,在你的浏览器中你应该能看到如下内容:
% zf create model GuestbookMapper
Creating a model at application/models/GuestbookMapper.php
Updating project profile '.zfproject.xml'
% zf create model Guestbook
Creating a model at application/models/Guestbook.php
Updating project profile '.zfproject.xml'
% 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'
注意:检查
发表评论
-
理解和使用 Zend 表单装饰器(一)
2010-07-23 20:06 887目录 理解和使用Zend表单装饰器:介绍 装饰器基础 装 ... -
开始使用 Zend_View 占位符
2010-07-22 18:36 1237目录 Zend_View 占位符:介绍 占位符的基本使用 ... -
开始使用 Zend_Layout
2010-07-20 19:44 1236目录 Zend_Layout介绍 使用Zend_Layou ... -
Zend Framework中的插件(Learning Zend Framework翻译3)
2010-07-20 16:19 1007目录 介绍 使用插件 结论 介绍Zend Framework ... -
在Zend Framework中自动加载(Learning Zend Framework翻译2)
2010-07-20 15:40 2905目录 介绍 目标与设计 ... -
Zend Framework 1.10.4手册(ZF的快速启动五)
2010-07-20 14:23 1281为了使我们的留言本有用,我们需要一个可以提交新条目的表单。 ... -
Zend Framework 1.10.4手册(ZF的快速启动三)
2010-07-19 16:25 1616你可能注意到在前面一节提到视图脚本是 HTML 片断——不是 ... -
Zend Framework 1.10.4手册(ZF的快速启动二)
2010-07-19 11:27 1770为了创建您的项目 ... -
Zend Framework 1.10.4手册(ZF的快速启动一)
2010-07-19 11:20 1320Zend Framework Zend Framework ... -
Zend_Application
2010-07-15 11:13 1176注:适合ZF1.10 Zend_Appl ...
相关推荐
"ZendFramework-1.10.4-minimal" 这个标题表明我们正在处理的是 Zend Framework 的一个特定版本,即1.10.4,并且是精简版(minimal)。这意味着它可能包含了框架的核心组件,但可能去除了某些非必要的或附加的模块,...
最新手册针对的是 Zend Framework 1.10.4 版本,这个版本包含了多项改进和优化,确保了框架的稳定性和性能。 **主要组件** 1. **控制器(Controllers)**:在 MVC 模式中,控制器接收用户请求,处理业务逻辑,并...
6. 版本控制:HDF5-1.10.4是HDF5的一个特定版本,它可能引入了新的特性和修复了一些已知问题。例如,此版本可能提高了性能、增强了稳定性或添加了对新硬件和操作系统的支持。 在机器学习领域,如安装Caffe这样的...
总结,jQuery UI 1.10.4是一个强大而全面的前端UI框架,它提供的组件丰富多样,易用性强,能够帮助开发者快速构建功能丰富的交互式Web应用。通过熟练掌握jQuery UI,开发者可以大大提高工作效率,提升用户界面的用户...
而jQuery UI则是jQuery的一个扩展,提供了一系列用户界面组件,使得开发者能够快速构建交互性强、用户体验良好的网页应用。本文将深入探讨jQuery 2.1.0版本和jQuery UI 1.10.4版本的主要特性和功能。 首先,让我们...
"dojo-release-1.10.4"是Dojo框架的一个稳定版本,发布于2015年,它提供了大量的功能和改进,以支持开发人员构建高效、响应式的网页应用。 1. **Dojo核心模块**:Dojo的核心模块包括`dojo/_base`,它包含了基本的...
Numpy提供了丰富的数学函数库,如四则运算、三角函数、指数和对数函数、统计函数等,可以直接作用于ndarray上,无需循环。例如,对数组进行求和、平均值计算或者标准差计算,只需一行代码就能实现。这对于数据预处理...
这个名为 "jquery-ui-1.10.4.custom" 的压缩包文件,很显然是一个自定义版本的 jQuery UI,版本号为 1.10.4。在本文中,我们将深入探讨 jQuery UI 的核心功能、使用场景以及其自定义版本的特性。 ### jQuery UI 的...
jquery-ui-1.10.4.min.js下载
《jQuery UI 1.10.4:深入解析与应用》 jQuery UI 是一个基于 jQuery 库的强大且灵活的用户界面工具集,它为开发者提供了丰富的组件和交互效果,极大地简化了网页界面的设计和开发。在本文中,我们将深入探讨 ...
当服务出现故障时,Consul 可以快速识别并通知系统,避免了故障扩散。 **Key/Value 存储** Consul 内置了一个简单的 Key/Value 存储,可用于存储和检索配置信息。这种分布式的 KV 存储允许开发者以集中式的方式管理...
gstreamer1-plugins-bad-free-1.10.4-3.el7.i686.rpm
"Viewer.js v1.10.4" 是一个专门用于Web前端的图片查看器库,主要针对PC和H5移动端的用户体验设计。该版本号表示这是Viewer.js的1.10.4次更新,通常意味着它包含了一些修复、优化或者新功能的添加。 在JavaScript的...
jquery-ui-v1.10.4.js.这个有用到的就不必说了.加点资源分希望大家能理解
《jQuery UI 1.10.4 自定义版本详解》 jQuery UI 是一个基于 jQuery JavaScript 库的可扩展用户界面库。它提供了多种可重用的组件,包括对话框(Dialog)、滑块(Slider)、日期选择器(Datepicker)和许多其他交互...
TortoiseSVN-1.10.3.28489-x64-svn-1.10.4
numpy-1.10.4.tar.gz
jquery-ui-v1.10.4.css.必备资源.加点资源分希望大家能理解
最新版的HDF5源代码,适用于所有平台,NetCDF开发需要使用到该压缩包。