2

私のプロジェクトでは Zend Framework と Doctrine 2 を使用しています。オートローダーが Doctrine リポジトリから Zend クラスをロードしないことを除いて、すべて正常に動作します。

Zend オートローダーのブートストラップ部分は次のとおりです。

/**
 * Register namespace Default_
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload() {
    $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Default_',
        'basePath'  => dirname(__FILE__),
    ));
    return $autoloader;
}

Doctrine の初期化のための私のブートストラップ部分は次のとおりです。

/**
 * Initialize Doctrine
 * @return Doctrine_Manager
 */
public function _initDoctrine() {
    // include and register Doctrine's class loader
    require_once('Doctrine/Common/ClassLoader.php');
    $classLoader = new \Doctrine\Common\ClassLoader(
        'Doctrine', 
        APPLICATION_PATH . '/../library/'
    );
    $classLoader->register();

    $classLoader = new \Doctrine\Common\ClassLoader(
        'Repositories',
        APPLICATION_PATH . '/../library/Model'
    );
    $classLoader->register();

    // create the Doctrine configuration
    $config = new \Doctrine\ORM\Configuration();

    // setting the cache ( to ArrayCache. Take a look at
    // the Doctrine manual for different options ! )
    $cache = new \Doctrine\Common\Cache\ApcCache;
    $config->setMetadataCacheImpl($cache);
    $config->setQueryCacheImpl($cache);

    // choosing the driver for our database schema
    // we'll use annotations
    $driver = $config->newDefaultAnnotationDriver(
        APPLICATION_PATH . '/../library/Model'
    );
    $config->setMetadataDriverImpl($driver);

    // set the proxy dir and set some options
    $config->setProxyDir(APPLICATION_PATH . '/../library/Model/Proxies');
    $config->setAutoGenerateProxyClasses(true);
    $config->setProxyNamespace('Model\Proxies');

    // now create the entity manager and use the connection
    // settings we defined in our application.ini
    $connectionSettings = $this->getOption('doctrine');
    $conn = array(
        'driver'    => $connectionSettings['conn']['driv'],
        'user'      => $connectionSettings['conn']['user'],
        'password'  => $connectionSettings['conn']['pass'],
        'dbname'    => $connectionSettings['conn']['dbname'],
        'host'      => $connectionSettings['conn']['host']
    );
    $entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);

    // push the entity manager into our registry for later use
    $registry = Zend_Registry::getInstance();
    $registry->entitymanager = $entityManager;

    return $entityManager;
}

どうすればこれを修正できますか?

4

3 に答える 3

1

あなたの _initAutoload は完全に不要です。追加するだけ

autoloadernamespaces[]  = Default
autoloadernamespaces[]  = Doctrine

あなたのapplication.iniに

于 2012-07-13T16:51:04.080 に答える
1

_initAutoload() は必要ないことに同意しますが、application.ini でこれが必要になると思います。

autoloaderNamespaces[] = "Doctrine"
autoloaderNamespaces[] = "Model"
于 2012-07-17T18:48:08.093 に答える
0

プロジェクトを開始したばかりの場合は、zf2を使用することをお勧めします(beta5の最後のベータ版:http://framework.zend.com/zf2/blog/entry/Zend-Framework-2-0-0beta5-Released これ
はチュートリアルです。私は自分のプロジェクトにzf2+doctrine2を使用していました
http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/

于 2012-07-13T16:07:11.747 に答える