vendor/doctrine/lib/Doctrine/ORM/Tools/Setup.php
changeset 0 7f95f8617b0b
equal deleted inserted replaced
-1:000000000000 0:7f95f8617b0b
       
     1 <?php
       
     2 /*
       
     3  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       
     4  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
       
     5  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       
     6  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
       
     7  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
     8  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       
     9  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
       
    10  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
       
    11  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    12  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    13  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    14  *
       
    15  * This software consists of voluntary contributions made by many individuals
       
    16  * and is licensed under the LGPL. For more information, see
       
    17  * <http://www.doctrine-project.org>.
       
    18 */
       
    19 
       
    20 namespace Doctrine\ORM\Tools;
       
    21 
       
    22 use Doctrine\Common\ClassLoader;
       
    23 use Doctrine\Common\Cache\Cache;
       
    24 use Doctrine\Common\Cache\ArrayCache;
       
    25 use Doctrine\ORM\Configuration;
       
    26 use Doctrine\ORM\Mapping\Driver\XmlDriver;
       
    27 use Doctrine\ORM\Mapping\Driver\YamlDriver;
       
    28 
       
    29 /**
       
    30  * Convenience class for setting up Doctrine from different installations and configurations.
       
    31  * 
       
    32  * @author Benjamin Eberlei <kontakt@beberlei.de>
       
    33  */
       
    34 class Setup
       
    35 {
       
    36     /**
       
    37      * Use this method to register all autoloaders for a setup where Doctrine is checked out from
       
    38      * its github repository at {@link http://github.com/doctrine/doctrine2}
       
    39      * 
       
    40      * @param string $gitCheckoutRootPath 
       
    41      * @return void
       
    42      */
       
    43     static public function registerAutoloadGit($gitCheckoutRootPath)
       
    44     {
       
    45         if (!class_exists('Doctrine\Common\ClassLoader', false)) {
       
    46             require_once $gitCheckoutRootPath . "/lib/vendor/doctrine-common/lib/Doctrine/Common/ClassLoader.php";
       
    47         }
       
    48         
       
    49         $loader = new ClassLoader("Doctrine\Common", $gitCheckoutRootPath . "/lib/vendor/doctrine-common/lib");
       
    50         $loader->register();
       
    51         
       
    52         $loader = new ClassLoader("Doctrine\DBAL", $gitCheckoutRootPath . "/lib/vendor/doctrine-dbal/lib");
       
    53         $loader->register();
       
    54         
       
    55         $loader = new ClassLoader("Doctrine\ORM", $gitCheckoutRootPath . "/lib");
       
    56         $loader->register();
       
    57         
       
    58         $loader = new ClassLoader("Symfony\Component", $gitCheckoutRootPath . "/lib/vendor");
       
    59         $loader->register();
       
    60     }
       
    61     
       
    62     /**
       
    63      * Use this method to register all autoloaders for a setup where Doctrine is installed
       
    64      * though {@link http://pear.doctrine-project.org}.
       
    65      * 
       
    66      * @return void
       
    67      */
       
    68     static public function registerAutoloadPEAR()
       
    69     {
       
    70         if (!class_exists('Doctrine\Common\ClassLoader', false)) {
       
    71             require_once "Doctrine/Common/ClassLoader.php";
       
    72         }
       
    73         
       
    74         $loader = new ClassLoader("Doctrine");
       
    75         $loader->register();
       
    76         
       
    77         $parts = explode(PATH_SEPARATOR, get_include_path());
       
    78         
       
    79         foreach ($parts AS $includePath) {
       
    80             if ($includePath != "." && file_exists($includePath . "/Doctrine")) {
       
    81                 $loader = new ClassLoader("Symfony\Component", $includePath . "/Doctrine");
       
    82                 $loader->register();
       
    83                 return;
       
    84             }
       
    85         }
       
    86     }
       
    87     
       
    88     /**
       
    89      * Use this method to register all autoloads for a downloaded Doctrine library.
       
    90      * Pick the directory the library was uncompressed into.
       
    91      * 
       
    92      * @param string $directory 
       
    93      */
       
    94     static public function registerAutoloadDirectory($directory)
       
    95     {
       
    96         if (!class_exists('Doctrine\Common\ClassLoader', false)) {
       
    97             require_once $directory . "/Doctrine/Common/ClassLoader.php";
       
    98         }
       
    99         
       
   100         $loader = new ClassLoader("Doctrine");
       
   101         $loader->register();
       
   102         
       
   103         $loader = new ClassLoader("Symfony\Component", $directory . "/Doctrine");
       
   104         $loader->register();
       
   105     }
       
   106     
       
   107     /**
       
   108      * Create a configuration with an annotation metadata driver.
       
   109      * 
       
   110      * @param array $paths
       
   111      * @param boolean $isDevMode
       
   112      * @param string $proxyDir
       
   113      * @param Cache $cache
       
   114      * @return Configuration
       
   115      */
       
   116     static public function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null)
       
   117     {
       
   118         $config = self::createConfiguration($isDevMode, $cache, $proxyDir);
       
   119         $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths));
       
   120         return $config;
       
   121     }
       
   122     
       
   123     /**
       
   124      * Create a configuration with an annotation metadata driver.
       
   125      * 
       
   126      * @param array $paths
       
   127      * @param boolean $isDevMode
       
   128      * @param string $proxyDir
       
   129      * @param Cache $cache
       
   130      * @return Configuration
       
   131      */
       
   132     static public function createXMLMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null)
       
   133     {
       
   134         $config = self::createConfiguration($isDevMode, $cache, $proxyDir);
       
   135         $config->setMetadataDriverImpl(new XmlDriver($paths));
       
   136         return $config;
       
   137     }
       
   138     
       
   139     /**
       
   140      * Create a configuration with an annotation metadata driver.
       
   141      * 
       
   142      * @param array $paths
       
   143      * @param boolean $isDevMode
       
   144      * @param string $proxyDir
       
   145      * @param Cache $cache
       
   146      * @return Configuration
       
   147      */
       
   148     static public function createYAMLMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null)
       
   149     {
       
   150         $config = self::createConfiguration($isDevMode, $cache, $proxyDir);
       
   151         $config->setMetadataDriverImpl(new YamlDriver($paths));
       
   152         return $config;
       
   153     }
       
   154     
       
   155     /**
       
   156      * Create a configuration without a metadata driver.
       
   157      * 
       
   158      * @param bool $isDevMode
       
   159      * @param string $proxyDir
       
   160      * @param Cache $cache
       
   161      * @return Configuration 
       
   162      */
       
   163     static public function createConfiguration($isDevMode = false, $proxyDir = null, Cache $cache = null)
       
   164     {
       
   165         if ($isDevMode === false && $cache === null) {
       
   166             if (extension_loaded('apc')) {
       
   167                 $cache = new \Doctrine\Common\Cache\ApcCache;
       
   168             } else if (extension_loaded('xcache')) {
       
   169                 $cache = new \Doctrine\Common\Cache\XcacheCache;
       
   170             } else if (extension_loaded('memcache')) {
       
   171                 $memcache = new \Memcache();
       
   172                 $memcache->connect('127.0.0.1');
       
   173                 $cache = new \Doctrine\Common\Cache\MemcacheCache();
       
   174                 $cache->setMemcache($memcache);
       
   175             } else {
       
   176                 $cache = new ArrayCache;
       
   177             }
       
   178             $cache->setNamespace("dc2_"); // to avoid collisions
       
   179         } else if ($cache === null) {
       
   180             $cache = new ArrayCache;
       
   181         }
       
   182         
       
   183         $config = new Configuration();
       
   184         $config->setMetadataCacheImpl($cache);
       
   185         $config->setQueryCacheImpl($cache);
       
   186         $config->setResultCacheImpl($cache);
       
   187         $config->setProxyDir( $proxyDir ?: sys_get_temp_dir() );
       
   188         $config->setProxyNamespace('DoctrineProxies');
       
   189         $config->setAutoGenerateProxyClasses($isDevMode);
       
   190         
       
   191         return $config;
       
   192     }
       
   193 }