zend 框架 2 + 教义 2 安装

Posted

技术标签:

【中文标题】zend 框架 2 + 教义 2 安装【英文标题】:zend framework 2 + doctrine 2 installation 【发布时间】:2012-05-13 03:01:52 【问题描述】:

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】:

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

git submodule update --init

顺便说一句,composer install 是推荐的方法。

【讨论】:

以上是关于zend 框架 2 + 教义 2 安装的主要内容,如果未能解决你的问题,请参考以下文章

在学说2和zend框架2中如何使用缓存?

Zend - 教义 2 查询构建器帮助

Zend 2 - 教义如何为三个实体插入一对多?

Zend Framework儿童系列不能保湿

什么是框架?什么是教义 2? [复制]

如何获得像2.3这样的zend框架骨架旧版本