Zend框架2+学说2安装


zend framework 2 + doctrine 2 installation

Zend Framework 2 + Doctrine 2

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

由于我在Windows 8机器上使用Zend Server CE,并且我没有GitHub帐户,因此我不得不手动将DoctrineModule和DoctrineORM Module下载到供应商文件夹中。我的问题是,我是否还需要下载 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

这是模块.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';
    }
}

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

git submodule update --init

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