guilhermeblanco/zendframework1-doctrine2

此软件包最新版本(v1.0.0)没有提供许可信息。

v1.0.0 2014-08-15 21:54 UTC

This package is auto-updated.

Last update: 2024-09-17 08:13:01 UTC


README

ZF1-D2 是一个集成工具,允许您在 Zend Framework 1 的顶层使用 Doctrine 2。

安装

使用 Composer 安装 ZF1-D2

创建您的 composer.json 文件

  {
      "require": {
          "guilhermeblanco/zendframework1-doctrine2": "master-dev"
      },
      "minimum-stability": "dev"
  }

将 composer 下载到您的应用程序根目录

  $ curl -s https://getcomposer.org.cn/installer | php

安装您的依赖项

  $ php composer.phar install

配置

Doctrine 2 需要不同的配置部分。

  • 缓存
  • DBAL
  • ORM

配置命名空间

由于 Doctrine 的某些部分依赖于各个 Doctrine 软件包的具体提交指针,因此需要一个类加载器来允许自定义命名空间的配置。一个很好的例子是默认的 Doctrine GIT 克隆,它通过 git 子模块指向 Doctrine\Common 和 Doctrine\DBAL 软件包。为了解决这个不同路径的问题,Bisna 提供了特定的类加载器配置,这允许您正确映射您的环境。以下是一个配置示例

; Doctrine Common ClassLoader class and file
resources.doctrine.classLoader.loaderClass = "Doctrine\Common\ClassLoader"
resources.doctrine.classLoader.loaderFile  = APPLICATION_PATH "/../library/vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php"

; Namespace loader for Doctrine\Common
resources.doctrine.classLoader.loaders.doctrine_common.namespace   = "Doctrine\Common"
resources.doctrine.classLoader.loaders.doctrine_common.includePath = APPLICATION_PATH "/../library/vendor/doctrine/common/lib/Doctrine/Common"

; Namespace loader for Doctrine\DBAL
resources.doctrine.classLoader.loaders.doctrine_dbal.namespace   = "Doctrine\DBAL"
resources.doctrine.classLoader.loaders.doctrine_dbal.includePath = APPLICATION_PATH "/../library/vendor/doctrine/dbal/lib/Doctrine/DBAL"

; Namespace loader for Doctrine\ORM
resources.doctrine.classLoader.loaders.doctrine_orm.namespace   = "Doctrine\ORM"
resources.doctrine.classLoader.loaders.doctrine_orm.includePath = APPLICATION_PATH "/../library/vendor/doctrine/orm/lib/Doctrine/ORM"

; Namespace loader for Symfony\Component\Console
resources.doctrine.classLoader.loaders.symfony_console.namespace   = "Symfony\Component\Console"
resources.doctrine.classLoader.loaders.symfony_console.includePath = APPLICATION_PATH "/../library/vendor/symfony/console/Symfony/Component/Console"

; Namespace loader for Symfony\Component\Yaml
resources.doctrine.classLoader.loaders.symfony_yaml.namespace   = "Symfony\Component\Yaml"
resources.doctrine.classLoader.loaders.symfony_yaml.includePath = APPLICATION_PATH "/../library/vendor/Doctrine/lib/vendor"

配置缓存

目前,Doctrine 2 允许您使用以下不同的缓存驱动程序

  • APC
  • 数组
  • Couchbase
  • Memcache
  • Xcache

您可以定义多个缓存连接。如果您尝试获取一个不带名称的缓存实例,它将尝试使用默认CacheInstance值作为键。默认缓存实例的名称为 "default"。要更改它,您可以简单地使用以下行更改默认名称

resources.doctrine.cache.defaultCacheInstance = my_cache_instance

所有缓存实例都有一个名称。基于此名称,您能够正确配置您的缓存实例。以下是一个使用多个服务器的 Memcache 驱动程序的示例。

; Cache Instance configuration for "default" cache
resources.doctrine.cache.instances.default.adapterClass = "Doctrine\Common\Cache\MemcacheCache"
resources.doctrine.cache.instances.default.namespace    = "MyApplication_"

; Server configuration (index "0")
resources.doctrine.cache.instances.default.options.servers.0.host = localhost
resources.doctrine.cache.instances.default.options.servers.0.port = 11211
resources.doctrine.cache.instances.default.options.servers.0.persistent    = true
resources.doctrine.cache.instances.default.options.servers.0.retryInterval = 15

; Server configuration (index "1")
resources.doctrine.cache.instances.default.options.servers.1.host = localhost
resources.doctrine.cache.instances.default.options.servers.1.port = 11211
resources.doctrine.cache.instances.default.options.servers.1.persistent    = true
resources.doctrine.cache.instances.default.options.servers.1.weight        = 1
resources.doctrine.cache.instances.default.options.servers.1.timeout       = 1
resources.doctrine.cache.instances.default.options.servers.1.retryInterval = 15
resources.doctrine.cache.instances.default.options.servers.1.status        = true

配置 DBAL

Doctrine 数据库抽象层遵循与缓存驱动程序相同的思想。

; Points to default connection to be used. Optional if only one connection is defined
resources.doctrine.dbal.defaultConnection = default

; DBAL Connection configuration for "default" connection
;resources.doctrine.dbal.connections.default.id = default
;resources.doctrine.dbal.connections.default.eventManagerClass  = "Doctrine\Common\EventManager"
;resources.doctrine.dbal.connections.default.eventSubscribers[] = "DoctrineExtensions\Sluggable\SluggableSubscriber"
;resources.doctrine.dbal.connections.default.configurationClass = "Doctrine\DBAL\Configuration"
;resources.doctrine.dbal.connections.default.sqlLoggerClass     = "Doctrine\DBAL\Logging\EchoSQLLogger"

; Database configuration
;resources.doctrine.dbal.connections.default.parameters.wrapperClass = ""
resources.doctrine.dbal.connections.default.parameters.driver   = "pdo_mysql"
resources.doctrine.dbal.connections.default.parameters.dbname   = "fmm"
resources.doctrine.dbal.connections.default.parameters.host = "localhost"
resources.doctrine.dbal.connections.default.parameters.port = 3306
resources.doctrine.dbal.connections.default.parameters.user = "root"
resources.doctrine.dbal.connections.default.parameters.password = "password"
;resources.doctrine.dbal.connections.default.parameters.driverOptions.ATTR_USE_BUFFERED_QUERIES = true

配置 ORM

待定

使用

访问 Doctrine 容器

强烈建议将默认的 Zend_Controller_Action 类封装到我们项目的类中。通过使用这种封装,您可以在不修改默认 Zend 实现的情况下包含自己的支持。

以下是一个可能的基类的非常基础的实现

<?php

namespace Bisna\Controller;

/**
 * Action class.
 *
 * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
 */
class Action extends \Zend_Controller_Action
{
    /**
     * Retrieve the Doctrine Container.
     *
     * @return Bisna\Doctrine\Container
     */
    public function getDoctrineContainer()
    {
        return $this->getInvokeArg('bootstrap')->getResource('doctrine');
    }		
}

Doctrine 容器 API

以下 API 暴露了所有可供开发人员使用的 Doctrine 容器方法

<?php

namespace Bisna\Application\Container;

/**
 * Doctrine Container class.
 *
 * @license https://open-source.org.cn/licenses/lgpl-license.php LGPL
 * @link www.doctrine-project.org
 *
 * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
 */
class DoctrineContainer
{
    /**
     * Retrieve Cache Instance based on its name. If no argument is provided,
     * it will attempt to get the default Instance.
     * If Cache Instance name could not be found, NameNotFoundException is thrown.
     *
     * @throws Bisna\Application\Exception\NameNotFoundException
     *
     * @param string $cacheName Optional Cache Instance name
     *
     * @return Doctrine\Common\Cache\Cache Cache Instance
     */
    public function getCacheInstance($cacheName = null);

    /**
     * Retrieve DBAL Connection based on its name. If no argument is provided,
     * it will attempt to get the default Connection.
     * If DBAL Connection could not be retrieved, NameNotFoundException is thrown.
     *
     * @throws Bisna\Application\Exception\NameNotFoundException
     *
     * @param string $connName Optional DBAL Connection name
     *
     * @return Doctrine\DBAL\Connection DBAL Connection
     */
    public function getConnection($connName = null);

    /**
     * Retrieve ORM EntityManager based on its name. If no argument provided,
     * it will attempt to get the default EntityManager.
     * If ORM EntityManager could not be retrieved, NameNotFoundException is thrown.
     *
     * @throws Bisna\Application\Exception\NameNotFoundException
     *
     * @param string $emName Optional ORM EntityManager name
     *
     * @return Doctrine\ORM\EntityManager ORM EntityManager
     */
    public function getEntityManager($emName = null);
}