【问题标题】:How to use Zend_Loader_Autoloader如何使用 Zend_Loader_Autoloader
【发布时间】:2012-05-05 10:41:16
【问题描述】:

我认为这是一个相当简单的问题,但是我只是没有在 Zend 框架中自动加载。

基本上,我有标准的 Zend 项目布局,包括应用程序/模型、应用程序/控制器、应用程序/视图目录。我还添加了一个 application/forms 目录,它包含的类将被命名为 Application_Form_*

如何向自动加载器注册新目录?

谢谢...

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    您无需向自动加载器注册新目录。如果你创建一个表单,它应该看起来像这样:-

    应用程序/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

    手册中有Autoloading in Zend Framework的解释。

    摘录:-

    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() 中专门处理的特殊情况,不应与主要的自动加载机制混淆。

    【讨论】:

    • 好的,所以应用程序/表单会自动注册,与应用程序/控制器相同。我想知道还有哪些其他目录会自动注册?
    • @KimPrince:查看类 Zend_Application_Module_Bootstrap 的源代码以获取默认资源自动加载器映射的完整列表。
    • @vascowhite:但是我的目录是 application/forms(注意复数形式,forms...),我的类名是 Application_Form_*,所以没有 1:1 映射。请参阅上面 David Weinraub 的评论......
    • @DavidWeinraub 这些映射在Zend_Application_Module_Autoloader 中。其实我不知道mappersdbTable,谢谢指点。
    • @vascowhite:噢!我的手指比我的大脑快。 ;-(感谢指正。;-)
    【解决方案2】:

    使用$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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      相关资源
      最近更新 更多