不起作用 - ZF2 克鲁德蒙戈


does not work - zf2 CRUD mongo

我正在尝试使用原则 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'    => '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()
            )
        ),
    ),
);

模块配置.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'
                )
            )                  
        )
    )

文档''阿蒂戈.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'));
    }
}

不会发生错误,也不会插入记录。你知道可以是什么吗?

我研究过 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'}

要更新,请将包含 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 客户端框架、控件序列化和访问控制集成。