【问题标题】:Global helper function capable of accessing Zend objects能够访问 Zend 对象的全局帮助函数
【发布时间】:2012-03-21 09:54:59
【问题描述】:

目前我正在使用视图助手来帮助我的调试过程。基本上我调用这个函数,它检查是否 1:我通过检查 Zend_Session_Namespace 变量作为开发人员登录,以及 2:应用程序是否使用 Zend_Registry 在 debug_mode 下运行。如果它们都为真,我将显示许多不同的调试变量和任何参数,我将帮助器作为输入。

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

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

【问题讨论】:

  • "Action Helpers 允许开发人员将运行时和/或按需功能注入任何扩展 Zend_Controller_Action 的 Action Controller" 我的控制器扩展 Zend_Controller_Action 但我的视图和模型没有,所以这将迫使我编写至少有两个相同函数的副本。
  • 不,如果需要,您可以将帮助程序从控制器传递到视图。还是不符合您的使用模式?
  • 不幸的是它没有。我的主要问题是我想在模型以及视图/控制器中使用相同的功能。虽然理论上我也可以将助手传递给模型,但这会很麻烦,并且可能需要进行相当多的重写。我正在寻找更像 Zend_Debug::dump 的东西,但没有静态函数的限制,因为我不想在生产环境中错误地输出调试信息,并且信息的内容可能取决于当前用户.

标签: php zend-framework


【解决方案1】:

我认为,如果您创建了一个静态类或单例类,您可以拥有所有所需的功能,而完全不会破坏您的 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() {}
}

此代码为您提供:

  • 能够从应用程序中的任何位置(模型、控制器、助手、视图等)调用
  • 在脱离上下文调用时防止执行的所有保护措施
  • 一个可以扩展的简单基础

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

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

My_DebugHelper::dump($someVar, $this->view, $model->getCustId());

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

【讨论】:

  • 这正是我正在寻找的,但我没有设法将这些功能包含在框架结构的一部分中。现在效果很好。
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 2015-07-16
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2013-02-26
相关资源
最近更新 更多