6

zf2 beta3 を doctrine mongo odm (https://github.com/doctrine/DoctrineMongoODMModule) と統合しようとしていますが、成功しません。

どのようにインストールして構成できますか?

4

3 に答える 3

6

私はちょうど同じことをしています。このようなものが動作するはずです:

モジュールをダウンロードし、vendor フォルダーに配置します。

モジュールを application.config.php に追加します

module.doctrine_mongodb.config.php.dist を /config/autoload にコピーします

その設定ファイルを独自の設定で編集します

その設定ファイルの名前を module.doctrine_mongodb.local.config.php に変更します

次のように、コントローラーに「setDocumentManager」メソッドを作成します。

protected $documentManager;

public function setDocumentManager(DocumentManager $documentManager)
{
    $this->documentManager = $documentManager;
    return $this;
}

モジュールの DI 構成に以下を配置します。

    'Application\Controller\[YourControllerClass]' => array(
        'parameters' => array(
            'documentManager' => 'mongo_dm'
        )
    ),

Doctrine 2 ドキュメント、およびこの質問と回答の説明に従ってドキュメント クラスを作成します。Annotations Namespace not loaded DoctrineMongoODMModule for Zend Framework 2

最後に、次のように dm を使用します。

public function indexAction()
{
    $dm = $this->documentManager;

    $user = new User();
    $user->set('name', 'testname');
    $user->set('firstname', 'testfirstname');
    $dm->persist($user);
    $dm->flush();

    return new ViewModel();
} 
于 2012-04-23T05:32:19.827 に答える
3

zf2をmongodbdoctrineodmと統合するために行った手順を示します

1. mongodb doctrine odmモジュールをダウンロードしてベンダーディレクトリに配置するか、githubからクローンを作成します

cd /path/to/project/vendor
git clone --recursive https://github.com/doctrine/DoctrineMongoODMModule.git

2.ファイルを/path/to/project/vendor/DoctrineMongoODMModule/config/module.doctrine_mongodb.config.php.distからコピーし、path / to / your / project / config / autoload /に配置して、module.doctrine_mongodbに名前を変更します。 .local.config.php

3.module.doctrine_mongodb.local.config.phpを編集します。デフォルトのデータベースを変更する

'config' => array(
    // set the default database to use (or not)
    'default_db' => 'myDbName'
), 

接続パラメータを変更する

'connection' => array(
    //'server'  => 'mongodb://<user>:<password>@<server>:<port>',
    'server'  => 'mongodb://localhost:27017',
    'options' => array()
),

ドライバーオプションを変更する

'driver' => array(
    'class'     => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
    'namespace' => 'Application\Document',
    'paths'     => array('module/Application/src/Application/Document'),
),

プロキシとhydratros構成を追加します

        'mongo_config' => array(
            'parameters' => array(
                'opts' => array(
                    'auto_generate_proxies'   => true,
                    'proxy_dir'               => __DIR__ . '/../../module/Application/src/Application/Document/Proxy',
                    'proxy_namespace'         => 'Application\Model\Proxy',
                    'auto_generate_hydrators' => true,
                    'hydrator_dir'            => __DIR__ . '/../../module/Application/src/Application/Document/Hydrators',
                    'hydrator_namespace'      => 'Application\Document\Hydrators',
                    'default_db' => $settings['config']['default_db'],
                ),
                'metadataCache' => $settings['cache'],
            )
        ),

4. / path / to / project / module / Application / src / Application /に「Document」という名前のディレクトリを作成します。ここでドキュメントのマッピングを行い、「Document」ディレクトリ内に「Proxy」ディレクトリと「Hydrators」ディレクトリを作成します。

5. /path/to/project/config/application.config.phpを編集し、「DoctrineMongoODMModule」をモジュール配列に追加します

6. mongo php拡張機能がインストールされていることを確認します。インストールされていない場合は、http: //www.php.net/manual/en/mongo.installation.php#mongo.installation.windowsからダウンロードして、拡張機能phpディレクトリ(通常は/ php)にコピーします。 /ext。ダウンロードした名前ファイル拡張子「extension=php_mongo-xxx-5.x-vc9.dll」に応じた拡張子をphp.iniに追加します。

7.ドキュメントディレクトリアプリケーションモジュールにドキュメントマッピングUser.phpを作成します。

<?php
namespace Application\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document */
class User
{
    /** @ODM\Id */
    private $id;

    /** @ODM\Field(type="string") */
    private $name;

    /**
     * @return the $id
     */
    public function getId() {
        return $this->id;
    }

    /**
     * @return the $name
     */
    public function getName() {
        return $this->name;
    }

    /**
     * @param field_type $id
     */
    public function setId($id) {
        $this->id = $id;
    }

    /**
     * @param field_type $name
     */
    public function setName($name) {
        $this->name = $name;
    }

}

8.たとえばコントローラーで永続化します

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\ActionController,
    Zend\View\Model\ViewModel,
    Application\Document\User;

class IndexController extends ActionController
{

    public function indexAction()
    {
        $dm = $this->getLocator()->get('mongo_dm');

        $user = new User();
        $user->setName('Bulat S.');

        $dm->persist($user);
        $dm->flush();

        return new ViewModel();
    }
}
于 2012-04-25T04:22:06.993 に答える
0

デフォルトの構成が変更されました。これを ZF2 で機能させるための更新された方法を示していただけますか?

<?php
return array(
    'doctrine' => array(

        'connection' => array(
            'odm_default' => array(
                'server'    => 'localhost',
                'port'      => '27017',
                'user'      => null,
                'password'  => null,
                'dbname'    => 'user',
                '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'         => null,

                'filters'            => array()   // array('filterName' => 'BSON\Filter\Class')
            )
        ),

        'driver' => array(
            'odm_default' => array(
                'drivers' => array()
            )
        ),

        'documentmanager' => array(
            'odm_default' => array(
                'connection'    => 'odm_default',
                'configuration' => 'odm_default',
                'eventmanager' => 'odm_default'
            )
        ),

        'eventmanager' => array(
            'odm_default' => array(
                'subscribers' => array()
            )
        ),
    ),
);

現在エラーを受け取っています: クラス 'Application\Document\User' がチェーン構成された名前空間で見つかりませんでした

于 2012-10-22T20:10:12.600 に答える