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

问题描述:

我有一个Zend Framework应用程序,它带有名称空间的自定义库(PHP 5.3)。如何注册名称空间的自定义视图助手?

我想注册一个视图助手,但我无法做到这一点,因为我在视图助手中使用的命名空间。

目前,我在我的引导,我有以下注册的助手路径:

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

,我得到的错误:

Zend_Loader_PluginLoader_Exception: 插件的名字“IsActive”不 在注册表中找到;使用的路径: 应用程序\查看\ Helper_:

有谁有一个想法如何注册视图助手被命名空间?

+0

您的意思是PHP 5.3的命名空间或ZF的命名空间 ? – user594791 2011-03-27 11:56:29

+0

PHP 5.3命名空间 – tom 2011-03-27 12:17:46

在我的配置,我用:

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

一件事,我发现的是,我需要把在构造函数,因为视图助手类名称和公共功能都是一样的,它将使用函数作为构造函数。如果您使用PHP 5.3.3或更高版本,这不会成为问题 - “从PHP 5.3.3开始,与名称空间类名称的最后一个元素名称相同的方法将不再被视为构造函数。 “

+2

尝试添加尾部斜杠到您的代码 - “App \ View \ Helper \” – robertlbolton 2011-03-29 18:05:29

+0

Thx!这工作。 – tom 2011-03-30 17:51:54

在我引导我用这个:

$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

+0

如果您不使用命名空间,则可以使用该命名空间。我需要一个自定义库名称空间的解决方案。 – tom 2011-03-27 10:14:18

+0

看起来更多。也许这个帮助。 – Iscander 2011-03-27 10:33:23

+0

重载__call方法是否有帮助? – Iscander 2011-03-27 16:41:20

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

+0

名称空间的自动加载器可以使用autoloaderNamespaces [] ='App'。但是在命名空间中添加视图助手不会。 – tom 2011-03-27 12:18:39