zend framework 2 + doctrine 2安装

时间:2012-05-13 03:01:52

标签: php orm doctrine-orm zend-framework2

Zend Framework 2 + Doctrine 2

参考这个问题,我对安装过程有一个简单的问题。

由于我在Windows 8计算机上使用Zend Server CE,而且我没有GitHub帐户,因此我不得不手动将DoctrineModule和DoctrineORM模块下载到供应商文件夹。我的问题是,我是否还需要下载Doctrine库并将其cd到供应商文件夹?

*编辑

我通过GIT安装,我在php_error.log

中收到此错误
[13-May-2012 01:37:22] PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Class Doctrine\ORM\Mapping\Driver\AnnotationDriver does not exist' in C:\Zend\Apache2\htdocs\zf2\vendor\DoctrineORMModule\Module.php:71
Stack trace:
#0 C:\Zend\Apache2\htdocs\zf2\vendor\DoctrineORMModule\Module.php(71): ReflectionClass->__construct('Doctrine\ORM\Ma...')
#1 [internal function]: DoctrineORMModule\Module->registerAnnotations(Object(Zend\Module\ModuleEvent))
#2 C:\Zend\Apache2\htdocs\zf2\vendor\ZendFramework\library\Zend\EventManager\EventManager.php(463): call_user_func(Array, Object(Zend\Module\ModuleEvent))
#3 C:\Zend\Apache2\htdocs\zf2\vendor\ZendFramework\library\Zend\EventManager\EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('loadModules.pos...', Object(Zend\Module\ModuleEvent), NULL)
#4 C:\Zend\Apache2\htdocs\zf2\vendor\ZendFramework\library\Zend\Module\Manager.php(87): Zend\EventManager\EventManager->trigger('loadModules.pos...', Object(Zend\Module\Manager), Object(Zend\Module\ModuleEvent))
#5 C:\Zend\Apache2 in C:\Zend\Apache2\htdocs\zf2\vendor\DoctrineORMModule\Module.php on line 71

这是Module.php

<?php
/*
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information, see
 * <http://www.doctrine-project.org>.
 */

namespace DoctrineORMModule;

use RuntimeException;
use ReflectionClass;
use Zend\EventManager\Event;
use Zend\Module\Consumer\AutoloaderProvider;
use Zend\Module\Manager;
use Zend\Module\ModuleEvent;
use Zend\Loader\StandardAutoloader;
use Doctrine\Common\Annotations\AnnotationRegistry;

/**
 * Base module for Doctrine ORM.
 *
 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @link    www.doctrine-project.org
 * @since   1.0
 * @version $Revision$
 * @author  Kyle Spraggs <theman@spiffyjr.me>
 * @author  Marco Pivetta <ocramius@gmail.com>
 */
class Module implements AutoloaderProvider
{
    /**
     * @param Manager $moduleManager
     */
    public function init(Manager $moduleManager)
    {
        $moduleManager->events()->attach('loadModules.post', array($this, 'registerAnnotations'));
    }

    /**
     * Registers annotations required for the Doctrine AnnotationReader
     *
     * @param  ModuleEvent $e
     * @throws RuntimeException
     */
    public function registerAnnotations(ModuleEvent $e)
    {
        $config = $e->getConfigListener()->getMergedConfig();
        $config = $config['doctrine_orm_module'];

        if ($config->use_annotations) {
            $annotationsFile = false;

            if (isset($config->annotation_file)) {
                $annotationsFile = realpath($config->annotation_file);
            }

            if (!$annotationsFile) {
                // Trying to load DoctrineAnnotations.php without knowing its location
                $annotationReflection = new ReflectionClass('Doctrine\ORM\Mapping\Driver\AnnotationDriver');
                $annotationsFile = realpath(dirname($annotationReflection->getFileName()) . '/DoctrineAnnotations.php');
            }

            if (!$annotationsFile) {
                throw new RuntimeException('Failed to load annotation mappings, check the "annotation_file" setting');
            }

            AnnotationRegistry::registerFile($annotationsFile);
        }

        if (!class_exists('Doctrine\ORM\Mapping\Entity', true)) {
            throw new RuntimeException('Doctrine could not be autoloaded: ensure it is in the correct path.');
        }
    }

    /**
     * Retrieves configuration that can be consumed by Zend\Loader\AutoloaderFactory
     *
     * @return array
     */
    public function getAutoloaderConfig()
    {
        if (realpath(__DIR__ . '/vendor/doctrine-orm/lib')) {
            return array(
                'Zend\Loader\StandardAutoloader' => array(
                    StandardAutoloader::LOAD_NS => array(
                        __NAMESPACE__                   => __DIR__ . '/src/' . __NAMESPACE__,
                        __NAMESPACE__ . 'Test'          => __DIR__ . '/tests/' . __NAMESPACE__ . 'Test',
                    ),
                ),
            );
        }

        return array();
    }

    /**
     * @return array
     */
    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

1 个答案:

答案 0 :(得分:0)

从git安装时,你是否也更新了子模块?如果没有,请进入DoctrineORMModule目录并使用以下命令:

git submodule update --init

顺便说一下,作曲家安装是推荐的方法。

相关问题