如何将ZF2与Doctrine Mongo ODM集成?

dex*_*vip 6 doctrine zend-framework doctrine-orm doctrine-odm zend-framework2

我正在尝试将zf2 beta3与doctrine mongo odm(https://github.com/doctrine/DoctrineMongoODMModule)集成,但没有成功.

我该如何安装和配置它?

sup*_*bie 6

我正在做同样的事情.这样的事情应该有效:

下载该模块,并放在您的供应商文件夹中.

在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;
}
Run Code Online (Sandbox Code Playgroud)

将以下内容放入模块的DI配置中:

    'Application\Controller\[YourControllerClass]' => array(
        'parameters' => array(
            'documentManager' => 'mongo_dm'
        )
    ),
Run Code Online (Sandbox Code Playgroud)

根据Doctrine 2文档创建Document类,并在此问题和答案中进行说明:Annotations Namespace未加载Zend Framework 2的DoctrineMongoODMModule

最后,像这样使用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();
} 
Run Code Online (Sandbox Code Playgroud)


dex*_*vip 3

我将给出我已完成的将 zf2 与 mongodb 学说 odm 集成的步骤

1.下载mongodbdoctrineodm模块并放置在vendor目录中或从github克隆它

cd /path/to/project/vendor
git clone --recursive https://github.com/doctrine/DoctrineMongoODMModule.git
Run Code Online (Sandbox Code Playgroud)

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'
), 
Run Code Online (Sandbox Code Playgroud)

更改您的连接参数

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

更改驱动程序选项

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

添加代理和 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'],
            )
        ),
Run Code Online (Sandbox Code Playgroud)

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 /分机。根据您在 php.ini 中下载的文件扩展名“extension=php_mongo-xxx-5.x-vc9.dll”添加扩展行。

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)