2014-10-12 44 views
1

有時我看到一個錯誤,當頁面加載時發生,它指向基類初始化Doctrine 2 Setup。學說2.無法重新聲明課程設置

問題是,錯誤通過時間發生並且經常發生,因此捕捉因果關係是非常困難的。不過,我相信這個問題已經遇到了某個人。它可能會提示迴應。

在此先感謝。

錯誤字符串:致命錯誤:無法在/..hidden路徑中重新聲明class doctrine \ orm \ tools \ setup ..../lib/DoctrineORM/Doctrine/ORM/Tools/Setup.php on line 34

<?php 
namespace Doctrine\ORM\Tools; 

use Doctrine\Common\ClassLoader; 
use Doctrine\Common\Cache\Cache; 
use Doctrine\Common\Cache\ArrayCache; 
use Doctrine\ORM\Configuration; 
use Doctrine\ORM\Mapping\Driver\XmlDriver; 
use Doctrine\ORM\Mapping\Driver\YamlDriver; 

/** 
* Convenience class for setting up Doctrine from different installations and configurations. 
* 
* @author Benjamin Eberlei <[email protected]> 
*/ 
class Setup 
{ 
    /** 
    * Use this method to register all autoloaders for a setup where Doctrine is checked out from 
    * its github repository at {@link http://github.com/doctrine/doctrine2} 
    * 
    * @param string $gitCheckoutRootPath 
    * @return void 
    */ 
    static public function registerAutoloadGit($gitCheckoutRootPath) 
    { 
     if (!class_exists('Doctrine\Common\ClassLoader', false)) { 
      require_once $gitCheckoutRootPath . "/lib/vendor/doctrine-common/lib/Doctrine/Common/ClassLoader.php"; 
     } 

     $loader = new ClassLoader('Doctrine\Common', $gitCheckoutRootPath . "/lib/vendor/doctrine-common/lib"); 
     $loader->register(); 

     $loader = new ClassLoader('Doctrine\DBAL', $gitCheckoutRootPath . "/lib/vendor/doctrine-dbal/lib"); 
     $loader->register(); 

     $loader = new ClassLoader('Doctrine\ORM', $gitCheckoutRootPath . "/lib"); 
     $loader->register(); 

     $loader = new ClassLoader('Symfony\Component', $gitCheckoutRootPath . "/lib/vendor"); 
     $loader->register(); 
    } 

    /** 
    * Use this method to register all autoloaders for a setup where Doctrine is installed 
    * though {@link http://pear.doctrine-project.org}. 
    * 
    * This method registers autoloaders for both Doctrine and Symfony top 
    * level namespaces. 
    * 
    * @return void 
    */ 
    static public function registerAutoloadPEAR() 
    { 
     if (!class_exists('Doctrine\Common\ClassLoader', false)) { 
      require_once "Doctrine/Common/ClassLoader.php"; 
     } 

     $loader = new ClassLoader("Doctrine"); 
     $loader->register(); 

     $loader = new ClassLoader("Symfony"); 
     $loader->register(); 

     $classLoader = new ClassLoader('DoctrineExtensions', $lib . 'DoctrineExtensions'); 
     $classLoader->register(); 
    } 

    /** 
    * Use this method to register all autoloads for a downloaded Doctrine library. 
    * Pick the directory the library was uncompressed into. 
    * 
    * @param string $directory 
    */ 
    static public function registerAutoloadDirectory($directory) 
    { 
     if (!class_exists('Doctrine\Common\ClassLoader', false)) { 
      require_once $directory . "/Doctrine/Common/ClassLoader.php"; 
     } 

     $loader = new ClassLoader("Doctrine", $directory); 
     $loader->register(); 

     $loader = new ClassLoader('Symfony\Component', $directory . "/Doctrine"); 
     $loader->register(); 

     $classLoader = new ClassLoader('DoctrineExtensions', $directory); 
     $classLoader->register(); 
    } 

    /** 
    * Create a configuration with an annotation metadata driver. 
    * 
    * @param array $paths 
    * @param boolean $isDevMode 
    * @param string $proxyDir 
    * @param Cache $cache 
    * @param bool $useSimpleAnnotationReader 
    * @return Configuration 
    */ 
    static public function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null, $useSimpleAnnotationReader = true) 
    { 
     $config = self::createConfiguration($isDevMode, $proxyDir, $cache); 
     $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths, $useSimpleAnnotationReader)); 
     return $config; 
    } 

    /** 
    * Create a configuration with a xml metadata driver. 
    * 
    * @param array $paths 
    * @param boolean $isDevMode 
    * @param string $proxyDir 
    * @param Cache $cache 
    * @return Configuration 
    */ 
    static public function createXMLMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null) 
    { 
     $config = self::createConfiguration($isDevMode, $proxyDir, $cache); 
     $config->setMetadataDriverImpl(new XmlDriver($paths)); 
     return $config; 
    } 

    /** 
    * Create a configuration with a yaml metadata driver. 
    * 
    * @param array $paths 
    * @param boolean $isDevMode 
    * @param string $proxyDir 
    * @param Cache $cache 
    * @return Configuration 
    */ 
    static public function createYAMLMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null) 
    { 
     $config = self::createConfiguration($isDevMode, $proxyDir, $cache); 
     $config->setMetadataDriverImpl(new YamlDriver($paths)); 
     return $config; 
    } 

    /** 
    * Create a configuration without a metadata driver. 
    * 
    * @param bool $isDevMode 
    * @param string $proxyDir 
    * @param Cache $cache 
    * @return Configuration 
    */ 
    static public function createConfiguration($isDevMode = false, $proxyDir = null, Cache $cache = null) 
    { 
     $proxyDir = $proxyDir ?: sys_get_temp_dir(); 
     if ($isDevMode === false && $cache === null) { 
      if (extension_loaded('apc')) { 
       $cache = new \Doctrine\Common\Cache\ApcCache(); 
      } else if (extension_loaded('xcache')) { 
       $cache = new \Doctrine\Common\Cache\XcacheCache(); 
      } else if (extension_loaded('memcache')) { 
       $memcache = new \Memcache(); 
       $memcache->connect('127.0.0.1'); 
       $cache = new \Doctrine\Common\Cache\MemcacheCache(); 
       $cache->setMemcache($memcache); 
      } else if (extension_loaded('redis')) { 
       $redis = new \Redis(); 
       $redis->connect('127.0.0.1'); 
       $cache = new \Doctrine\Common\Cache\RedisCache(); 
       $cache->setRedis($redis); 
      } else { 
       $cache = new ArrayCache(); 
      } 
     } else if ($cache === null) { 
      $cache = new ArrayCache(); 
     } 
     $cache->setNamespace("dc2_" . md5($proxyDir) . "_"); // to avoid collisions 

     $config = new Configuration(); 
     $config->setMetadataCacheImpl($cache); 
     $config->setQueryCacheImpl($cache); 
     $config->setResultCacheImpl($cache); 
     $config->setProxyDir($proxyDir); 
     $config->setProxyNamespace('DoctrineProxies'); 
     $config->setAutoGenerateProxyClasses($isDevMode); 

     return $config; 
    } 
} 
+0

「無法重新聲明類」通常意味着有另一個名爲Setup的類。 – Cerad 2014-10-12 15:48:22

+0

有時我會遇到這樣的錯誤,當有多個緩存存儲啓用和使用... – 2014-10-12 16:20:35

+0

是的,也許這是一個問題,因爲我用modx revo的Doctrine 2。並且都使用緩存永久 – 2ball 2014-10-12 21:51:49

回答

0

問題是重複加載實體。