Zend framework 如何将自己的库添加到Zend Framework

Zend framework 如何将自己的库添加到Zend Framework,zend-framework,namespaces,Zend Framework,Namespaces,因此,我一直在设计一个在Zend Framework 1.11上运行的应用程序,就像任何程序员看到重复的功能时所做的那样,我想用这些功能构建一个基类 现在我的计划是构建一个库“my”,所以我在应用程序的库目录中创建了一个文件夹。看起来是这样的 Project Application docs library My public test 因此,我在My文件夹中创建了一个BaseController类,然后决定让应用程序中的IndexCont

因此,我一直在设计一个在Zend Framework 1.11上运行的应用程序,就像任何程序员看到重复的功能时所做的那样,我想用这些功能构建一个基类

现在我的计划是构建一个库“my”,所以我在应用程序的库目录中创建了一个文件夹。看起来是这样的

Project 
   Application 
   docs 
   library 
      My 
   public 
   test
因此,我在My文件夹中创建了一个BaseController类,然后决定让应用程序中的IndexController扩展BaseController

Basecontroller如下所示:

class My_BaseController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $this->view->test = 'Hallo Wereld!';
    }

}
class WMSController extends My_BaseController
{

    public function indexAction()
    {
        parent::indexAction();
    }

}
IndexController的外观如下所示:

class My_BaseController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $this->view->test = 'Hallo Wereld!';
    }

}
class WMSController extends My_BaseController
{

    public function indexAction()
    {
        parent::indexAction();
    }

}
正如许多参考资料所建议的,我尝试使用以下行在application.ini中添加库的名称空间

autoloadernamespaces.my = “My_”
但是当我尝试运行这个应用程序时,我收到了以下错误

致命错误:在中找不到类“My_BaseController” C:\wamp\www\ZendTest\application\controllers\IndexController.php

我是不是遗漏了什么?还是我只是一个木偶,应该尝试不同的方法


提前谢谢

我不知道
.ini
配置,但我添加了如下客户库(index.php):


您最初的方法将在application.ini中适用,您的设置有几个问题

您的application.ini应该有以下行:-

autoloadernamespaces[] = "My_"
此外,您必须小心使用类名,以基本控制器为例,它应该位于
library/My/controller/base.php
中,如下所示:-

class My_Controller_Base extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->test = 'Hello World!';
    }
}
class WMSController extends My_Controller_Base
{
    public function indexAction()
    {
        parent::indexAction();
    }  
}
然后您可以这样使用它:-

class My_Controller_Base extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->test = 'Hello World!';
    }
}
class WMSController extends My_Controller_Base
{
    public function indexAction()
    {
        parent::indexAction();
    }  
}

所以,你说的几乎是对的,但遗漏了几个细节。了解自动加载在Zend Framework中的工作原理并学习使用

是值得的,事实上这是我的一个错误,我在上面的问题中纠正了它:)请注意,扩展Zend_Controller_操作几乎总是一个坏主意-通常创建帮助程序或插件会更好。我从来没有发现过一个扩展Zend_Controller_操作的用例,它无法用混合的资源、帮助程序和插件更容易地进行测试/注入。是的,我100%同意你的观点,但这个问题是关于添加你自己的库的,使用OP自己的示例似乎更容易。在这里发表评论可能很好,谢谢。谢谢你对我问题的回答。我对Zend框架的工作方式很陌生,因此没有与常用的最佳实践融为一体@Shrikeh,我将更详细地查看帮助程序和插件,感谢您的警告:)