我认为这是一个相当简单的问题,但是我只是没有在 Zend 框架中自动加载。
基本上,我有标准的 Zend 项目布局,包括应用程序/模型、应用程序/控制器、应用程序/视图目录。我还添加了一个 application/forms 目录,它包含的类将被命名为 Application_Form_*
如何使用自动加载器注册新目录?
谢谢...
金
我认为这是一个相当简单的问题,但是我只是没有在 Zend 框架中自动加载。
基本上,我有标准的 Zend 项目布局,包括应用程序/模型、应用程序/控制器、应用程序/视图目录。我还添加了一个 application/forms 目录,它包含的类将被命名为 Application_Form_*
如何使用自动加载器注册新目录?
谢谢...
金
您不需要使用自动加载器注册新目录。如果您创建一个表单,它应该看起来像这样:-
应用程序/forms/Myform.php
class Application_Form_Myform extends Zend_Form
{
public function init()
{
//Put your code here
}
}
然后,您可以像这样实例化您的表单(例如在您的控制器中):-
$myform = new Application_Form_Myform();
Zend Framework 将为您自动加载该类。
http://framework.zend.com/manual/en/learning.quickstart.create-form.html
手册中有关于Zend Framework 中 Autoloading的说明。
从中摘录:-
Zend Framework 借鉴了 » PEAR 的一个想法,即类名与文件系统具有 1:1 的关系。简单来说就是为了解析文件的路径,把下划线(“_”)换成目录分隔符,然后加上后缀“.php”。例如,类“Foo_Bar_Baz”将对应于文件系统上的“Foo/Bar/Baz.php”。假设还可以通过 PHP 的 include_path 设置解析类,这允许 include() 和 require() 通过 include_path 上的相对路径查找来查找文件名。
这基本上意味着文件夹并不都需要在自动加载器中注册。只要您遵循命名约定和正确的大小写,它就可以很高兴地在应用程序或库/Zend 文件夹下的任何文件夹中找到文件。
application/ 下以 's' 结尾的默认文件夹是专门处理的特殊情况Zend_Application_Module_Autoloader::initDefaultResourceTypes()
,不应与主要的自动加载机制混淆。
使用$resourceLoader
:
$resourceLoader->addResourceTypes(array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models/',
'namespace' => 'Model',
),
));
请参阅:http: //framework.zend.com/manual/en/zend.loader.autoloader-resource.html