【问题标题】:Zend AutoLoad Custom Directory?Zend AutoLoad 自定义目录?
【发布时间】:2012-03-16 21:36:17
【问题描述】:

我认为 Zend 中内置了自动加载功能,因此如果您尝试实例化一个类,它会使用类名来尝试查找该类的文件所在的位置。

我希望能够使用自动加载器在我的应用程序的根目录中加载 DTO 目录。我以为我可以为文件 /application/dtos/myClass.php 执行类似 Application_DTO_MyClass 的操作

我试过用谷歌搜索它,但没有发现任何有用的东西。有什么关于如何做到这一点的最佳方法的提示吗?

【问题讨论】:

    标签: zend-framework zend-autoloader


    【解决方案1】:

    这里有几个选项可供您选择,具体取决于您是想在 Application/Models 的子目录中创建模型,还是在您自己的“命名空间”中将它们创建为库的子目录。我假设您使用的是recommended directory structure for Zend Framework

    为了在Application/Models的子目录中创建模型,首先创建你的目录;在您的情况下 Application/Models/Dto 将是我的建议。

    在该目录中创建 Myclass.php,其中包含:-

    class Application_Model_Dto_Myclass
    {
        public function __construct()
        {
            //class stuff
        }
    }
    

    你会这样实例化:-

    $myObject = new Application_Model_Dto_Myclass();
    

    如果您想在自己的“命名空间”中创建类作为库的子目录,则首先创建目录 library/Dto,然后再次创建文件 Myclass.php,如下所示:-

    class Dto_Myclass
    {
        public function __construct()
        {
            //class stuff
        }
    }
    

    您必须注册此“命名空间”;我建议在您的 application.ini 中添加以下行:

    autoloadernamespaces[] = "Dto_"
    

    你可以这样实例化这个类:-

    $myObject = new Dto_Myclass();
    

    我不确定您为什么无法通过 google 找到此内容,但您会在 Zend Framework Programmers' Reference Guide 中找到所有这些内容以及更多内容。我还发现 ZF 代码是了解其工作原理的绝佳资源。

    【讨论】:

    • 你为什么要用new Application_Model_Myclass();而不是new Application_Model_Dto_Myclass();来调用它,这是实际的类名?我看到你推荐的作品没有意义。如果您在该 DTO 目录中有一个具有相同结尾的类怎么办?
    • 奇怪的是它可以使用拼写错误但没有它,它仍然说它找不到类。
    • 搞定了。你说的是对的,我只是在我的代码中有一些不正确的地方。再次感谢!
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2015-09-15
    • 2013-03-20
    • 2012-01-02
    • 2015-08-21
    • 2012-08-30
    相关资源
    最近更新 更多