使用Zend_Autoloader适用机型
-
12-09-2019 - |
题
是否有人知道如何使用“新”的Zend自动加载到负荷模型?在此刻我的配置是这样的:
的application.ini
# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"
bootstrap.php中
/**
* Start Autoloader
*
* @access protected
* @return Zend_Application_Module_Autoloader
*/
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Sl_',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}
因此,当我放在/Models/User.php一个模型
class Sl_Model_User{}
和创建新的对象,一切就像设计。但如何使用自动加载加载放置在/Models/Dao/UserDB.php一个模型?
class Dao_UserDB{}
解决方案
检查文档上Resource_Autoloader(其目的是为了加载驻留在模型目录或其他地方资源 - 即在/库文件夹之外)。
“资源自动加载的目的是管理遵循的Zend Framework编码标准的指南命名空间库中的代码,但没有1:类名和目录结构之间的一对一映射他们的主要目的是便于自动加载应用程序资源代码如特定应用的模型,形式,和ACL。
资源自动加载寄存器对实例化的自动加载器,与它们所关联的命名空间。这使您可以轻松命名空间代码在特定的目录,而且还收获自动加载的好处。“
path/to/some/directory/
acls/
Site.php
forms/
Login.php
models/
User.php
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/directory',
'namespace' => 'My',
));
$resourceLoader->addResourceTypes(array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models/',
),
));
在你的自举文件试试这个:
protected function _initLoaderResource()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'your_doc_root' . '/application',
'namespace' => 'MyNamespace'
));
$resourceLoader->addResourceTypes(array(
'model' => array(
'namespace' => 'Model',
'path' => 'models'
)
));
}
其他提示
根据当前设置
ClassFile的: /Models/Dao/UserDB.php
产品类别: 类Dao_UserDB {}
应该是:
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Dao_',
'basePath' => APPLICATION_ROOT.'/Models/Dao/',
));
但你也可以命名类: S1_Dao_UserDB()这应该工作,而不改变。
要定义自定义模型自动加载机的规则(在自定义库DIR)如下:
|-application
|-library
|-Foo
|-Models
|-Bar.php (holds Foo_Model_Bar class - mind no 's' in class name)
|-Forms
|-Bar.php (holds Foo_Form_Bar class - mind no 's' in class name)
|-Zend
|-public
|-test
您应该在bootstrap.php中添加此
/**
* Enable loading custom classes
*/
public function _initAutoloaders()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH . '/../library/Foo',
'namespace' => 'Foo_'
));
$resourceLoader->addResourceTypes(array(
'foomodels' => array(
'namespace' => 'Model_',
'path' => 'Models')
),
'fooforms' => array(
'namespace' => 'Form_',
'path' => 'Forms')
),
);
}
我花了一段时间才能弄清楚,希望这样可以节省时间某人
不隶属于 StackOverflow