在zend框架中,我像这样注册我的命名空间(在application.php中):
'autoloaderNamespaces' => array(
'Cms_'
)
在此之后 - 我希望除了Zend和ZendX路径之外,如果调用未知类,Zend将始终检查该路径。但由于某些原因,这不适用于例如视图助手。
我仍然需要为我的视图助手注册一个单独的路径,即使视图助手脚本是根据Zend编码标准命名的,并且位于:
Cms/View/Helper/
这就是我在配置文件中注册帮助路径的方法:
view' => array(
'charset' => 'UTF-8',
'doctype' => 'XHTML1_TRANSITIONAL',
'helperPath' => array(
'Cms_View_Helper_' => 'Cms/View/Helper'
)
),
所以 - 我不知道为什么我必须先通过'autoloaderNamespaces'然后通过View“helperPath”两次注册“Cms”命名空间? Cms命名空间不应该包含Cms / View / Helper命名空间吗?
有人可以澄清这个:)
答案 0 :(得分:4)
View Helpers被视为特定于应用程序,因此在Recommended Project Directory Structure View Helpers应该放在application / views / helpers中。这意味着,如果ZF只解决传统的类名,通常就找不到它们。
当您从View中调用$this->helperName()
或$this->getHelper('HelperName')
的帮助程序时,View将使用带有配置的前缀和路径的PluginLoader来获取该帮助程序并注入当前的View实例。有关所有详细信息,请参阅sourcecode:
换句话说,在加载ViewHelper时,您没有使用Autoloader。参见:
答案 1 :(得分:2)
这是直接来自我的一个application.ini文件。
autoloaderNamespaces.Foo = "Foo"
includePaths.library = APPLICATION_PATH "/../library"
我的“Foo”库位于库目录 - library / Foo中。到目前为止,我所做的就是在包含路径中使“Foo”库可用。
我需要为我的视图的默认列表添加一个单独的辅助路径,否则视图将不会在该目录中查找匹配的视图助手。我想将视图助手加载为直接发现。该视图需要有关于在哪里寻找帮助者的明确指示。
答案 2 :(得分:1)
我相信它与您描述的完全一致,documentation on custom view helpers非常明确:
您可以并且应该为类名赋予前缀,并且建议您使用“View_Helper”作为该前缀的一部分:“My_View_Helper_SpecialPurpose”。 (您需要将带有或不带尾随下划线的前缀传递给addHelperPath()或setHelperPath())。
这确实对我有意义。从理论上讲,您可以构建一个可以在多个应用程序中重复使用的通用视图助手库,因此将它们绑定到特定的应用程序命名空间会很不方便,即如果我的所有帮助程序都以“MyApp_”为前缀,我必须将它们重命名为能够在'MyOtherApp'中使用它们。