我正在尝试使用mongodb使用doctrine 2和zend framework 2构建一个CRUD。
我遵循了一些教程,但它仍然失败。
点击链接: http://www.bigwisu.com/2012/10/03/zend-framework-2-doctrine-odm https://github.com/doctrine/DoctrineMongoODMModule
以下是项目中使用的配置:
module.doctrine_mongodb.local.config.php
<?php
return array(
'doctrine' => array(
'connection' => array(
'odm_default' => array(
'server' => 'localhost',
'port' => '27017',
'dbname' => 'teste',
'options' => array()
),
),
'configuration' => array(
'odm_default' => array(
'metadata_cache' => 'array',
'driver' => 'odm_default',
'generate_proxies' => true,
'proxy_dir' => 'data/DoctrineMongoODMModule/Proxy',
'proxy_namespace' => 'DoctrineMongoODMModule\Proxy',
'generate_hydrators' => true,
'hydrator_dir' => 'data/DoctrineMongoODMModule/Hydrator',
'hydrator_namespace' => 'DoctrineMongoODMModule\Hydrator',
'default_db' => 'teste',
'filters' => array()
)
),
'documentmanager' => array(
'odm_default' => array(
// 'connection' => 'odm_default',
// 'configuration' => 'odm_default',
// 'eventmanager' => 'odm_default'
)
),
'eventmanager' => array(
'odm_default' => array(
'subscribers' => array()
)
),
),
);
module.config.php 添加
'doctrine' => array(
'driver' => array(
__NAMESPACE__.'_driver' => array(
'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document')
),
'odm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Document' => __NAMESPACE__.'_driver'
)
)
)
)
文献\ Artigo.php
<?php
namespace Site\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document(collection="artigo") */
class Artigo
{
/** @ODM\Id */
private $id;
/** @ODM\Field(type="string") */
private $nome;
/**
* @return the $id
*/
public function getId() {
return $this->id;
}
/**
* @return the $nome
*/
public function getNome() {
return $this->nome;
}
/**
* @param field_type $id
*/
public function setId($id) {
$this->id = $id;
}
/**
* @param field_type $nome
*/
public function setNome($nome) {
$this->nome = $nome;
}
}
和控制器:
<?php
namespace Site\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Site\Document\Artigo;
class IndexController extends AbstractActionController
{
public function indexAction()
{
$dm = $this->getServiceLocator()->get('doctrine.documentmanager.odm_default');
$artigo = new Artigo();
$artigo>setNome("teste");
$dm->persist($artigo);
$dm->flush();
return new ViewModel(array('teste'=>'acho que deu'));
}
}
没有错误发生,也没有插入记录。 你知道可以做什么吗?
答案 0 :(得分:0)
我已经使用了DoctrineMongoODMModule,并拥有自己的库,可以帮助连接zf2 doctrine和mongo。如果要为学说文档创建json REST端点,请按以下方式...
将以下内容添加到您的composer.json:
"superdweebie/doctrine-extensions-module": "dev-master"
更新作曲家。
在application.config.php
:
'modules' => array(
'Sds\Zf2ExtensionsModule',
'DoctrineModule',
'DoctrineMongoODMModule',
'Sds\DoctrineExtensionsModule',
),
然后添加这个模块配置:
'sds' => [
'doctrineExtensions' => [
'doctrine' => [
'driver' => 'odm_default',
'eventmanager' => 'odm_default',
'configuration' => 'odm_default',
'documentManager' => 'doctrine.documentmanager.odm_default',
],
'extensionConfigs' => [
'Sds\DoctrineExtensions\Rest' => true,
],
],
],
'router' => [
'routes' => [
'Sds\Zf2ExtensionsModule\RestRoute' => [
'type' => 'Sds\Zf2ExtensionsModule\RestRoute',
'options' => [
'route' => '/rest',
'defaults' => [
'controller' => 'Sds\DoctrineExtensionsModule\Controller\JsonRestfulController'
],
],
],
],
],
然后将@Sds\Rest
注释添加到您的文档中:
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Sds\DoctrineExtensions\Annotation\Annotations as Sds;
/**
* @ODM\Document
* @Sds\Rest
*/
class MyDocument{
...
}
就是这样。
现在您可以像这样使用REST服务:
其余端点位于http://mysite.com/rest/mydocument
要从任何请求中恢复json,请包含accept: "application/json"
标头。要使用任何请求发送json,请包含content-type: "application/json"
标题。
要阅读单个项目,请发送一个ID为GET
的请求:
http://mysite.com/rest/mydocument/itemid
要阅读列表,请将GET
请求发送至:
http://mysite.com/rest/mydocument
列出产品时,默认情况下会返回前30个。要改变它,请使用范围标题,例如:
range: items=5-10
即使要求超过30个项目,也会返回30的格言。响应将具有以下标题以指示已返回哪些项目以及总共有多少项目:
Content-Range: items 0-24/66
可以使用查询字符串查询列表。例如:
http://mysite.com/rest/mydocument?fieldA=filterValue
可以使用查询字符串对列表进行排序。例如,将按类型对加入进行排序,然后按名称降序:
http://mysite.com/rest/mydocument?sort(+type,-name)
要创建,请发送带有json内容的POST
请求。例如:
request-
http://mysite.com/rest/mydocument
content-
{id: 1234, fieldA: 'abc'}
要进行更新,请将PUT
请求与json内容一起发送到特定ID。例如:
request-
http://mysite.com/rest/mydocument/1234
content-
{fieldA: 'def'}
要删除,请向特定ID发送DELETE
请求。例如:
http://mysite.com/rest/mydocument/1234
可以在https://sds.readthedocs.org/en/latest/找到这些模块的文档的开头。此处未描述的其他功能可与dojo客户端框架,控件序列化和访问控制集成。