0

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'
                )
            )                  
        )
    )

ドキュメント\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'));
    }
}

エラーは発生せず、レコードも挿入されません。何ができるか知っていますか?

4

1 に答える 1

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',       
),

次に、モジュール構成の次の 1 つを追加します。

'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"ヘッダーを含めます。

1 つのアイテムを読み取るにはGET、ID を指定してリクエストを送信します。

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)

作成するには、POSTjson コンテンツを含むリクエストを送信します。例えば:

request-
http://mysite.com/rest/mydocument

content-
{id: 1234, fieldA: 'abc'}

更新するにはPUT、json コンテンツを含むリクエストを特定の 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 クライアント・サイド・フレームワーク、制御のシリアライゼーション、およびアクセス制御と統合するために、ここで説明していない他の機能があります。

于 2013-01-31T10:34:10.650 に答える