我正在尝试使用原则 2 构建 CRUD,并使用 mongodb 构建 zend 框架 2。
我遵循了一些教程,但仍然失败。
点击以下链接:http://www.bigwisu.com/2012/10/03/zend-framework-2-doctrine-odmhttps://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' => 'DoctrineMongoODMModuleProxy',
'generate_hydrators' => true,
'hydrator_dir' => 'data/DoctrineMongoODMModule/Hydrator',
'hydrator_namespace' => 'DoctrineMongoODMModuleHydrator',
'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()
)
),
),
);
模块配置.php加
'doctrine' => array(
'driver' => array(
__NAMESPACE__.'_driver' => array(
'class' => 'DoctrineODMMongoDBMappingDriverAnnotationDriver',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document')
),
'odm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Document' => __NAMESPACE__.'_driver'
)
)
)
)
文档\阿蒂戈.php
<?php
namespace SiteDocument;
use DoctrineODMMongoDBMappingAnnotations as ODM;
/** @ODMDocument(collection="artigo") */
class Artigo
{
/** @ODMId */
private $id;
/** @ODMField(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 SiteController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
use SiteDocumentArtigo;
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'));
}
}
不会发生错误,也不会插入记录。你知道可以是什么吗?
我研究过 DoctrineMongoODMModule,并且有自己的库,可以帮助连接 zf2 doctrine 和 mongo。如果要为原则文档创建 json REST 终结点,方法如下...
将以下内容添加到您的 composer.json 中:
"superdweebie/doctrine-extensions-module": "dev-master"
更新编辑器。
在您的application.config.php
中注册这些模块:
'modules' => array(
'SdsZf2ExtensionsModule',
'DoctrineModule',
'DoctrineMongoODMModule',
'SdsDoctrineExtensionsModule',
),
然后添加以下模块配置之一:
'sds' => [
'doctrineExtensions' => [
'doctrine' => [
'driver' => 'odm_default',
'eventmanager' => 'odm_default',
'configuration' => 'odm_default',
'documentManager' => 'doctrine.documentmanager.odm_default',
],
'extensionConfigs' => [
'SdsDoctrineExtensionsRest' => true,
],
],
],
'router' => [
'routes' => [
'SdsZf2ExtensionsModuleRestRoute' => [
'type' => 'SdsZf2ExtensionsModuleRestRoute',
'options' => [
'route' => '/rest',
'defaults' => [
'controller' => 'SdsDoctrineExtensionsModuleControllerJsonRestfulController'
],
],
],
],
],
然后将@SdsRest
批注添加到文档中:
use DoctrineODMMongoDBMappingAnnotations as ODM;
use SdsDoctrineExtensionsAnnotationAnnotations as Sds;
/**
* @ODMDocument
* @SdsRest
*/
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'}
要更新,请将包含 json 内容的PUT
请求发送到特定 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 客户端框架、控件序列化和访问控制集成。