簡體   English   中英

不起作用-zf2 CRUD mongo

[英]does not work - zf2 CRUD mongo

我正在嘗試使用doctrine 2和zend framework 2使用mongodb構建一個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'
                )
            )                  
        )
    )

Document \\ 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'));
    }
}

沒有錯誤發生,也不會插入記錄。 你知道會是什么嗎?

我研究了DoctrineMongoODMModule,並擁有自己的庫,可以幫助連接zf2學說和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'}

要刪除,請將DELETE請求發送到特定的ID。 例如:

http://mysite.com/rest/mydocument/1234

這些模塊的文檔開頭可在https://sds.readthedocs.org/en/latest/中找到。 還有此處未描述的其他功能,可與dojo客戶端框架,控件序列化和訪問控制集成在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM