Shanty_Mongo和Zend Framework 1.11

时间:2012-01-28 09:53:42

标签: php zend-framework mongodb

我正在使用zend framework 1.11和mongo。我已经决定使用Shanty_Mongo作为一个库轻松地结合Zend和Mongo,但我陷入了这个例外:

无法保存文档。文档未连接到数据库和集合

这是控制器中的代码:

    public function indexAction()
    {
         try {
            $guestbook = new Application_Model_Guestbook();
            $guestbook->setComment('Commento di prova')
                ->setEmail('info@example.net')
                ->save();
            $all_elements = Application_Model_Guestbook::all();
            $this->view->entries = $all_elements;
        } catch (Exception $exc) {
            echo $exc->getMessage();
        }
    }

这是模型的(部分):

class Application_Model_Guestbook extends Shanty_Mongo_Document
{
      protected static $_db = 'test';
      protected static $_collection = 'user';

      protected $_comment;
         .....

Shanty在我的库文件夹中,在application.ini中我添加了它:

resources.view[] =
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
autoloaderNamespaces[] = "Shanty"

在Shanty-Mongo文档中,据报道

“如果您在没有任何身份验证的情况下连接到localhost,则无需再担心连接。如果之前未添加任何连接,Shanty Mongo将自动连接第一个请求。”

但这不会发生..我真的无法猜到为什么。 显然,mongo正在运行,因为如果我使用php Mongo()我可以访问它并执行插入等...

我在osx 10.6.8上运行最新版本的mongo,zend on php 5.3.6 谢谢!

5 个答案:

答案 0 :(得分:1)

你的模型应该是这样的

 class Application_Model_Guestbook extends Shanty_Mongo_Document
 {
  protected static $_db = 'test';
  protected static $_collection = 'user';
  protected static $_requirements = array('comment'=>'Required')

答案 1 :(得分:0)

我想您可能想要将autoloaderNamespaces [] =“Shanty”行切换为:

autoloaderNamespaces[] = 'Shanty_Mongo'

除此之外看起来还不错......

答案 2 :(得分:0)

这是一个奇怪的错误信息。请注意,它没有说“无法连接到MongoDB”或类似的东西。它说该文档没有连接到集合。这听起来像是一个配置问题。

在代码的其他方面,您是否可以连接到数据库?

从数据库中读取?

答案 3 :(得分:0)

Allesio,

你和Adam C都放在autoloaderNamespaces数组上的元素不太正确。请尝试以下方法:

autoloaderNamespaces[] = "Shanty_"

您只需要将顶级前缀后跟下划线。如果这不能解决问题,请告诉我。另外,我之前没有看到过该错误消息。当然,如果您运行了mongoDB的本地安装,则无需指定任何身份验证参数。

如果集合不存在,Shanty将创建它,如果文档不存在,Shanty也会创建它。

您使用的是哪种操作系统?

我在Ubuntu存储库中遇到了一些问题。但是,将10gen存储库添加到apt并安装最新的稳定版本帮助了我。虽然即使这似乎也会定期崩溃。

答案 4 :(得分:0)

尝试将此添加到Bootstrap.php:

  protected function _initMongoDB() {
    $connection = new Shanty_Mongo_Connection('mongodb://localhost:27017'); 
    Shanty_Mongo::addMaster($connection);
  }