【问题标题】:How to add your own library to Zend Framework如何将自己的库添加到 Zend Framework
【发布时间】:2012-05-11 12:44:37
【问题描述】:

所以我一直在设计一个在 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_”

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

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

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

提前致谢!

【问题讨论】:

    标签: zend-framework namespaces


    【解决方案1】:

    您的原始方法在 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 中自动加载的工作原理并学习使用 class naming conventions

    【讨论】:

    • 请注意,扩展 Zend_Controller_Action 几乎总是一个坏主意——通常最好创建帮助程序或插件。我从来没有找到一个扩展 Zend_Controller_Action 的用例,它不能更容易地通过混合资源、帮助程序和插件进行测试/注入。
    • 是的,我 100% 同意你的观点,但这个问题是关于添加你自己的库,使用 OP 自己的示例似乎更容易。不过,在这里发表评论可能会很好,谢谢。
    • 感谢您对我的问题的答复。我对 Zend 框架的工作方式非常陌生,因此不熟悉常用的最佳实践。 @Shrikeh,我将更详细地了解帮助程序和插件,感谢您的警告:)
    【解决方案2】:

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

    require_once 'Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance()->registerNamespace('My_');
    

    【讨论】:

    • 实际上这是我的错字,我在上面的问题中更正了它:)
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多