0

次のようなディレクトリ構造を持つことができるように自動ロードを設定するにはどうすればよいですか

/application
    /models  <<--- plural
    ...

Zend/Doctrine Autoloader load を持っていますApplication\Model\User。注意 モデルが特異です。

現在、次のようにオートローダーをセットアップしています(Bootstrap.php _initDoctrine()

$zendAutoloader = Zend_Loader_Autoloader::getInstance();

// Symfony
$autoloader = array(new ClassLoader('Symfony'), 'loadClass');
$zendAutoloader->pushAutoloader($autoloader, 'Symfony\\');

// Doctrine 
$autoloader = array(new ClassLoader('Doctrine'), 'loadClass');
$zendAutoloader->pushAutoloader($autoloader, 'Doctrine\\');

// Models
$autoloader = array(new ClassLoader('Application\\Model', realpath(__DIR__ . '/models')), 'loadClass');
$zendAutoloader->pushAutoloader($autoloader, 'Application\\Model');

// Proxies
$autoloader = array(new ClassLoader('Application\\Model\\Proxy', realpath(__DIR__ . '/models/proxies')), 'loadClass');
$zendAutoloader->pushAutoloader($autoloader, 'Application\\Model\\Proxy');

現在、 を使用しようとするとApplication\Model\User

require(D:\Projects\Tickle\application\models\Application\Model\User.php): failed to open stream: No such file or directory

を含めようとしていますapplication\models\Application\Model\User.php。うーん、私が予想したよりも奇妙です。とにかくどうすれば修正できますか?

4

2 に答える 2

2

試す:

$modelsClassLoader = new ClassLoader('Application\Model', __DIR__ . '/models');
$modelsClassLoader->register();
于 2010-12-17T13:29:55.267 に答える
0

ClassLoaderこれを解決した方法は、Zend の代わりにDoctrine の autoloader/ を使用することでした。

// disable Zend Autoloader
spl_autoload_unregister(array('Zend_Loader_Autoloader','autoload'));

// use Doctrine2's Class Loader
$autoloader = new ClassLoader('Zend');
$autoloader->setNamespaceSeparator('_');
$autoloader->register();

// Symfony
$autoloader = new ClassLoader('Symfony');
$autoloader->register();

// Doctrine 
$autoloader = new ClassLoader('Doctrine');
$autoloader->register();

// Application
$autoloader = new ClassLoader('Application', realpath(__DIR__ . '/..'));
$autoloader->register();

私の間違いの 1 つは、realpath(__DIR__ . '/..')自分のディレクトリ構造で which を使用する必要があることでした...

/Tickle (Project name)
    /application
        /models
            /proxies
...

"Tickle" を指すので、doctrine がパス "Application/Models/User.php" を追加すると、存在する "/Tickle/Application/Models/Users.php" のようになります。

于 2010-12-17T13:51:53.433 に答える