Zend 框架 1.11 +原则 2 集成:自动加载模型 models/user.php ->型号\用户

发布于 2024-10-08 01:16:06 字数 1311 浏览 0 评论 0原文

我如何设置自动加载,以便我可以拥有像这样的目录结构

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

并让 Zend/Doctrine Autoloader 加载 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): 无法打开流:没有这样的文件或目录

它试图包含 application\models\应用程序\模型\User.php。嗯,它比我预想的更奇怪。无论如何我该如何解决它?

How can I setup autoloading such that I can have my directory structure like

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

And have Zend/Doctrine Autoloader load Application\Model\User. Notice Model is singular.

Currently I have autoloader setup as follows (in 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');

Currently, when I try using Application\Model\User, I get

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

Its trying to include application\models\Application\Model\User.php. hmm its wierder than I expected. How can I fix it anyways?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦中楼上月下 2024-10-15 01:16:06

尝试:

$modelsClassLoader = new ClassLoader('Application\Model', __DIR__ . '/models');
$modelsClassLoader->register();

Try:

$modelsClassLoader = new ClassLoader('Application\Model', __DIR__ . '/models');
$modelsClassLoader->register();
跨年 2024-10-15 01:16:06

我解决这个问题的方法是使用 Doctrine 的 autoloader/ClassLoader 而不是 Zend 的

// 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();

第一个错误是我应该使用 realpath(__DIR__ . '/..')使用我的目录结构,...

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

指向“Tickle”,这样当学说附加路径“Application/Models/User.php”时,它将看起来像存在的“/Tickle/Application/Models/Users.php”

The way I resolved this was to use Doctrine's autoloader/ClassLoader instead of Zend's

// 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 of my mistakes was that I should be using realpath(__DIR__ . '/..') which with my directory structure, ...

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

Points to "Tickle", so that when doctrine appends the path "Application/Models/User.php" it will look like "/Tickle/Application/Models/Users.php" which exists

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文