这篇文章是经过最近的经验出发来扩展雷的个人网站。 这是一个简单的网站,我开始在Zend Framework写一些年前,我的工作,偶尔。 有了它,我很喜欢,往往只是这是你自己的东西,完整的创作自由。 在该网站上,我想有一个相当长的一段时间的博客,最近我已经开始学习和 CouchDB 和米 ongoDB NoSQL数据库,包括工作。
更重要的是,我去过的建设作为一个把两者结合起来的第一个测试一个简单的文件服务器与 MongoDB 和Zend框架。 由于该项目进展非常顺利,我认为我应该申请什么我做了一些创建一个超简单的博客。 因此,这个职位将一些文件的过程中,给您简单介绍到这两种技术相结合。 这是不会太详细,只是一个热身,但我打算写一个建设后,这个职位的情侣。
你要需要按照这个职位是:
- 工作知识的 Zend Framework - ZF的工具可用- 1.1o或以上版本
- 一个与Web服务器, 如Apache 2,工作发展环境
- 一个安装了 MongoDB
- 以开放的心态尝试新事物
但第一的背景上MongoDB的快速位。 据官方网站,MongoDB是:
MongoDB的桥梁键 - 值商店(这是快速和高度可扩展性)和传统之间的差距
RDBMS系统(提供了丰富的查询和深功能)。 MongoDB的(从“胡蒙戈我们”)是一个可伸缩的,高性能的,开放源码,面向文档的数据库。
这是写在C + +和体育以下特点:
- 面向文档存储
- 完整的索引支持
- 复制和高可用性
- 自动sharding
- 查询
- 很快,就地更新
- Map / Reduce和
- GridFS
总而言之,这使得一个好的制度,如果你正在寻找替代传统的RDBMS。
PHP
还有的高品质,免费提供的,PHP库,包括PHP扩展, Zend_NoSQL_Mongo和棚户区蒙戈 。 对于这个职位,我安顿在棚户区蒙戈非常迅速,因为它集成了Zend框架是相当丰富的功能。 我将得不到太多细节在这里,你在网站上可以找到更多。
作为该项目的重点是关于MongoDB的,而比Zend框架,我假设了很多事先了解如何设置和管理项目的组成部分。 然而,为了协助让一切快速启动和运行,运行下面的命令得到基地项目目录,准备去。
ZF创建项目的迷你博客 ZF创建配置 ZF使布局 ZF创建模块的帖子 ZF创建控制器索引1职位 ZF创建控制器创建1个职位 ZF创建控制器删除1个职位 ZF创建控制器更新1职位 ZF创建控制器查看1个职位
之后,抢自己从Github上的棚户区蒙戈的副本。 只需运行以下命令:
GIT克隆的git:/ / github.com /科恩海德/棚户区Mongo.git
然后添加的库/棚户目录,在压缩的文件,您的项目库目录。 然后,在你的application.ini,库添加到项目的生产部分的命名空间:
autoloaderNamespaces [] =“Shanty_”
当这样做了,你就可以开始使用它。 此外,添加autoloaderNamespaces“[] =”Common_“ 。 我们需要为我们的类。
正如我们前面介绍的,蒙戈是一个面向文档的存储系统。 因此使用它的权利,你必须要考虑的文件, 而不是行 ,元组 , 表和 MySQL或Oracle等模式。 这使得它更简单,我相信,工作与面向对象的开发语言, 如 PHP 。 所以,我创建了一个文档类,下面我们将使用我们的文章。 有下面一看,然后我们将讨论它是如何工作的。
// a simple class to model a post
class Post extends Shanty_Mongo_Document
{
protected static $_db = 'forum';
protected static $_collection = 'posts';
protected static $_requirements = array(
'
作者'=>'所必需的'
// a simple class to model a post
class Post extends Shanty_Mongo_Document
{
protected static $_db = 'forum';
protected static $_collection = 'posts';
protected static $_requirements = array(
'
'title' => 'Required',
'body' => 'Required',
'createdDate' => 'Required',
'publishedDate' => 'Required',
'status' => array('Validator:InArray' => array('draft', 'published'),
));
}
_db属性链接文件到数据库 ,这将是英寸集合中存储的文件,这将成为其成员的集合名称。 _requirements阵列执行文件验证约束的方法。 对于我们后,我们执行后:作者,标题,身体,创建日期,发布日期 和状态 。 这将有助于我们保持适当的文件的完整性。
一旦文档类的设置,那么它的时间来充实了帖子控制器。
在添加文件后,我们已经验证和处理的形式的行动,我们将得到我们的职位的详细信息。 那么我们将创建一个新的发布文件,存储在它的信息,并保存它。 听起来简单吗? 这是。 有在看下面的代码片段。
public function createAction()
{
$blogPost = new Common_Blog_Post();
$blogPost->author = $this->_request->getParam('author');
$blogPost->title = $this->_request->getParam('title');
$blogPost->body = $this->_request->getParam('body');
$blogPost->createdDate = $this->_request->getParam('createDate');
$blogPost->publishedDate = $this->_request->getParam('publishedDate');
$blogPost->status = $this->_request->getParam('status');
$blogPost->save();
}
现在,这个假设你已经设置的代码, 填充和处理上Zend_Form的一种形式,我假设是基于Zend_Config的组件。 我粉饰这对我们没有特别集中在该区域的框架后。 因此,请与我现在在这方面承担。
好了,这是伟大的,我们已经保存后,但如何更新一个。 这并不是说硬诚实。 这不是它们添加不同。 首先,你需要实例化后,在数据库中,我们会做根据它的标题在数据库中,如果你能找到。 然后,一旦你的文档,更新它所需的属性,然后将它保存。 就是这样。 因此,让我们看看一些示例代码。
public function updatePost() {
// attempt to open a post if we can find it
$blogPost = Common_Blog_Post::fetchOne(
array('title' => $this->_request->getParam('title'))
);
// we found the post, so let's update the properties
$blogPost->author = $this->_request->getParam('author');
$blogPost->title = $this->_request->getParam('title');
$blogPost->body = $this->_request->getParam('body');
$blogPost->createdDate = $this->_request->getParam('createDate');
$blogPost->publishedDate = $this->_request->getParam('publishedDate');
$blogPost->status = $this->_request->getParam('status);
$blogPost->save();
}
好了,我们已经介绍了创建和更新职位。 删除帖子。 updatePost行动,deletePost行动将使用findOne的方法,试图找到并加载现有的职位,根据文章标题。 如果我们找到它,然后我们在其上运行的删除方法。 应该指出,当我们拿出一个数据库的一个文件,任何连接的数据库将删除的文件时,在下一个复制过程中发生。 我们不需要编写任何额外的代码来实现这一目标。 真是一种解脱。 那么,什么代码?
public function deletePost() {
// attempt to open a post if we can find it
$blogPost = Common_Blog_Post::fetchOne(
array('title' => $this->_request->getParam('title')));
// we found the post, so let's delete it
$blogPost->delete();
}
那么,所剩不多,现在去。 所以让我们看看在列表项 - 查看职位名单。 对于这一点,我们将使用“ 所有 ”的方法。 这将返回一个Shanty_Mongo_Iterator_Cursor对象,让我们来逐一收集岗位。 尼斯和简单。 我们要做我们viewPosts控制器是作为一个视图变量分配的对象,然后它遍历在我们的视图模板。 有一个在下面的示例代码。
public function viewAction() {
// attempt to open a post if we can find it
$blogPosts = Common_Blog_Post::all(
);
public function viewAction() {
// attempt to open a post if we can find it
$blogPosts = Common_Blog_Post::all(
/ /分配对象作为视图变量
$ - >视图- >帖子= $ blogPosts;
}
现在在视图模板:
<?php foreach ($posts as $post) : ?>
<a href='/posts/<?php print $post->title; ?>'><?php print $post->title; ?></a>
<p><?php print $post->body; ?></p>
<!-- print the rest of the post information -->
<?php endforeach; ?>
它真的就是这么简单。
现在,这篇文章应该有给你介绍的是多么容易集成MongoDB和Zend Framework的想法,特别是与棚户区蒙戈库。 我很欣赏,有很多事我不包括在这里喜欢的形式,适当的安全和更加彻底的验证,。 我也没有了很多关于MongoDB的可用的功能,如存储的文件,究竟如何复制作品,各种各样的细节。 但我希望我已经激起学习更多你的食欲。
敬请关注。 在未来的文章中,我将要获得在存储文件和一些MongoDB的更深层次的力学和棚户区蒙戈库的细节多一点。 之后,我们会得到一些有趣的GridFS。
如果你喜欢你读,并希望看到更多, 请转推,或给它一个喜欢在 Facebook上,甚至给它一些 DIGG爱。
直到下一次,