-2

所以我一直在设计一个在 Zend Framework 1.11 上运行的应用程序,就像任何程序员在看到重复的功能时都会做的那样,我想去构建一个具有上述功能的基类。

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

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!';
    }

}

IndexController 看起来像这样:

class WMSController extends My_BaseController
{

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

}

根据许多资源的建议,我尝试使用以下行在 application.ini 中添加库的命名空间

autoloadernamespaces.my = “My_”

但是当我尝试运行此应用程序时,我收到以下错误

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

我在这里错过了什么吗?还是我只是一个布偶,应该尝试不同的方法?

提前致谢!

4

2 回答 2

3

您的原始方法将在 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();
    }  
}

所以,你几乎是对的,但只是遗漏了几个细节。值得了解自动加载在 Zend Framework 中的工作原理并学习使用类命名约定

于 2012-05-11T14:37:43.767 回答
2

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

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance()->registerNamespace('My_');
于 2012-05-11T12:47:15.410 回答