如何注册命名空间的自定义视图助手?

时间:2011-03-27 09:31:10

标签: php zend-framework namespaces view-helpers

我有一个Zend Framework应用程序,其中包含一个名为namespaced的自定义库(PHP 5.3)。

我想注册一个视图助手,但由于我在视图助手中使用的命名空间,我无法这样做。

目前我在我的bootstrap中我有以下注册Helper路径:

protected function _initView()
{
    $view = new Zend_View();
    $view->addHelperPath(
        APPLICATION_PATH . "/../library/App/View/Helper",
        "App\View\Helper"
    );
}

我得到的错误:

  

Zend_Loader_PluginLoader_Exception:   名为'IsActive'的插件不是   在注册表中找到;使用路径:   应用\视图\助手_:

有人知道如何注册名称空间的视图助手吗?

3 个答案:

答案 0 :(得分:4)

在我的配置中,我使用:

resources.view.helperPath.Glewz\View\Helper\ = APPLICATION_PATH "/../library/Glewz/View/Helper"

我发现的一件事是我需要输入构造函数,因为视图助手类名和公共函数是相同的,它将使用该函数作为构造函数。如果您使用的是PHP 5.3.3或更高版本,这将不会成为问题 - http://php.net/manual/en/language.oop5.decon.php - “从PHP 5.3.3开始,与命名空间类名称的最后一个元素同名的方法将不再是作为构造函数处理。此更改不会影响非命名空间的类。“

答案 1 :(得分:0)

在我的引导程序中,我使用它:

$view->addHelperPath(APPLICATION_PATH . '/../library/App/View/Helper', 'App_View_Helper');

其他: 您可以在Zend_View_Abstract中重载__call方法:

if ( method_exists($helper, $name) ) {
    $methodName = $name;
} else {
    $methodName = 'direct';
}

return call_user_func_array(array($helper, $methodName), $args);

See this

答案 2 :(得分:0)

我认为默认的ZF自动加载器无法使用命名空间。您可以尝试编写自己的自动加载器(或尝试使用that one)并将其注册为默认值。