能够访问Zend对象的全局辅助函数

时间:2012-03-20 19:59:39

标签: php zend-framework

目前我正在使用view-helper来帮助我的调试过程。基本上我调用这个函数并检查是否1:我通过检查Zend_Session_Namespace变量以及作为开发人员登录,如果应用程序是使用Zend_Registry在debug_mode中运行的。如果两者都为真,我会显示许多不同的调试变量以及我给助手作为输入的任何参数。

最初这个函数只是为了检查我在分配给视图的对象中获得了正确的信息,但我很快发现它在其他地方也很有用。目前,该功能在控制器中使用$ this->视图,我想我可以在技术上使用新的Zend_View();或Zend_Controller_Action_HelperBroker :: getStaticHelper('viewRenderer');在我的模型中获取一个视图对象,但即使它仅用于调试,这也很简单。

所以我的问题是:我如何将这个帮助器重建为一个全局函数(可用于模型,视图和控制器),并且仍然能够使用Zend_Session_Namespace和Zend_Registry对象,同时(尽可能)维护MVC结构

1 个答案:

答案 0 :(得分:3)

我认为如果您创建了一个静态类或一个单例类,那么您可以拥有所有所需的功能,而不会破坏您的MVC结构。

考虑以下带有一个静态函数的简单类:

<?php

class My_DebugHelper
{
    public static function dump()
    {
        $ns = new Zend_Session_Namespace('the_namespace');  // the namespace you refer to with the developer flag
        $debug_mode = Zend_Registry::get('debug_mode');

        if (!isset($ns->isDeveloper) || !$ns->isDeveloper || !$debug_mode) {
            return;
        }

        foreach(func_get_args() as $arg) {
            Zend_Debug::dump($arg);
        }
    }

    protected function __construct() {} 
    protected function __clone() {}
}

此代码为您提供:

  • 从应用程序中的任何位置(模型,控制器,助手,视图等)进行调用的能力
  • 所有保护措施,以防止在被取消上下文时执行
  • 您可以扩展的简单基础

根据您的需要,您可以做的至少一件事是将其设置为静态,以便它可以存储一些信息而不是每次调用时访问它,或添加其他方法或专用参数,以便您可以传递{{1}如有必要,请将对象注入其中并将数据注入视图。

您可以从应用程序的任何位置调用它,并将一个或多个值传递给dump:

Zend_View

我不确定您的视图帮助程序当前如何/显示数据,但希望这有助于您将视图助手合并到可以在任何地方调用的泛型类中。