2010-07-30 79 views
3

我似乎設法學說2的自動加載機集成到Zend的,壽我不知道我是否做正確...這是將Zend Framework與Doctrine 2集成的正確方法嗎?

目錄結構

/application 
    /models 
     /User.php // following classes are doctrine models 
     /Post.php 
     /Tag.php 
    /proxies 
     /...  // proxy classes generated by doctrine 
    /...   // other zend classes 

的bootstrap.php>_initDoctrine()

// setup Zend & Doctrine Autoloaders 
require_once "Doctrine/Common/ClassLoader.php"; 

$zendAutoloader = Zend_Loader_Autoloader::getInstance(); 

// $autoloader = array(new \Doctrine\Common\ClassLoader(), 'loadClass'); 

$autoloader = array(new \Doctrine\Common\ClassLoader('Symfony'), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'Symfony\\'); 
$autoloader = array(new \Doctrine\Common\ClassLoader('Doctrine'), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'Doctrine\\'); 
$autoloader = array(new \Doctrine\Common\ClassLoader('DoctrineExtensions'), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'DoctrineExtensions\\'); 
$autoloader = array(new \Doctrine\Common\ClassLoader('Application\\Models', realpath(__DIR__ . '/..')), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'Application\\Models\\'); 
$autoloader = array(new \Doctrine\Common\ClassLoader('Application\\Proxies', realpath(__DIR__ . '/..')), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'Application\\Proxies'); 
$autoloader = array(new \Doctrine\Common\ClassLoader('DoctrineExtensions'), 'loadClass'); 
$zendAutoloader->pushAutoloader($autoloader, 'DoctrineExtensions\\'); 

// setup configuration as seen from the sandbox application 
// TODO: read configuration from application.ini 
$config = new \Doctrine\ORM\Configuration; 
$cache = new \Doctrine\Common\Cache\ArrayCache; 
$config->setMetadataCacheImpl($cache); 
$driverImpl = $config->newDefaultAnnotationDriver(realpath(__DIR__ . '/models')); 
$config->setMetadataDriverImpl($driverImpl); 
$config->setQueryCacheImpl($cache); 
$config->setProxyDir(realpath(__DIR__ . '/proxies')); 
$config->setProxyNamespace('Application\\Proxies'); 
$config->setAutoGenerateProxyClasses(true); 

$connectionOptions = array(
    'driver' => 'pdo_mysql', 
    'user' => 'root', 
    'password' => '', 
    'dbname' => 'learningzf' 
); 

// setup entity manager 
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config); 
Zend_Registry::set("em", $em); 
return $em; 

1個問題我已經是可以i的newDefaultAnnotationDriver()和使用相對路徑isit更安全地說,我只是建立使用realpath()__DIR__將是最安全的完整路徑?

我還想知道教義是否需要我爲每個名稱空間設置自動加載1,然後推送該自動加載器?

然後我想知道here的例子是否可行?基本上他用類似...

protected function _initDoctrine() 
{ 
    // Create the doctrine autoloader and remove it from the spl autoload stack (it adds itself) 
    require_once 'Doctrine/Common/ClassLoader.php'; 
    $doctrineAutoloader = array(new \Doctrine\Common\ClassLoader(), 'loadClass'); 
    spl_autoload_unregister($doctrineAutoloader); 

    // Fetch the global Zend Autoloader 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 

    // Push the doctrine autoloader to load for the Doctrine\ namespace 
    $autoloader->pushAutoloader($doctrineAutoloader, 'Doctrine\\'); 
} 

我不知道他爲什麼不需要的參數從學說2沙箱傳遞到ClassLoader,命名空間被傳遞到磁帶自動加載機,1 1磁帶自動加載機註冊。爲什麼需要spl_autoload_unregister($doctrineAutoloader)

回答

3

好的我只是說是,關閉這個

相關問題