我正在使用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 谢谢!
答案 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);
}