假设您试图让自己尽可能接近Zend Framework的Universe视图,那么一个模块的视图和操作助手应该如何与另一个模块共享?
假设我有两个模块。模块“A”有一个名为Output的视图助手。
class Modulea_Zend_View_Helper_Ouput extends Zend_View_Helper_Abstract
{
function output($var)
{
echo strip_tags($var);
return true;
}
}
如果我尝试在模块“B”
中的视图中使用此帮助程序File: moduleb/views/scripts/index/index.phtml
<?php $this->output($somevar); ?>
我得到了一个例外
在注册表
中找不到名称'输出'的插件
使用模块B中的视图助手输出的“正确”是什么。
答案 0 :(得分:2)
添加Chillini的答案,并回应Starx随后的评论:
如果$view
未定义,请尝试将其添加到Bootstrap:
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
$view->addHelperPath(
APPLICATION_PATH . '/views/helpers/',
'My_View_Helper'
);
}
此外,我注意到您可能希望将class Modulea_Zend_View_Helper_Ouput
更改为class Modulea_Zend_View_Helper_Output
以防万一。
答案 1 :(得分:1)
您可以在引导程序中将助手添加到视图中
$this->bootstrap('view');
$view->addHelperPath(APPLICATION_PATH . '/views/helpers/','My_View_Helper');
答案 2 :(得分:1)
仅添加:
resources.view.helperPath.Application_View_Helper = APPLICATION_PATH "/views/helpers"
够了..
答案 3 :(得分:1)
我实现这个的最简单方法如下。
Helpers
文件夹Library
Output.php
class Helpers_Output extends Zend_View_Helper_Abstract { public function ($var) { echo strip_tags($var); return true; } }
在Application.ini中添加视图助手路径,如下所示
resources.view.helperPath.Helpers =“Helpers /”
我更喜欢这种方法,因为它允许您将助手放在模块外的中心位置,而在其他位置使其可用于整个应用程序,您只需要在Application.ini中输入一行
答案 4 :(得分:1)
这是我的方法:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
public function __construct($application) {
parent::__construct($application);
$this->bootstrap("view");
$view = $this->getResource('view');
Zend_Registry::set("Zend_View", $view);
}
}
class Core_Bootstrap extends Zend_Application_Module_Bootstrap {
public function __construct($application) {
parent::__construct($application);
$view = Zend_Registry::get("Zend_View");
$view->addHelperPath(APPLICATION_PATH . "/modules/core/views/helpers", 'Core_View_Helper');
}
}
因为应用程序范围(比如说“全局”)视图助手与模块共享,所以当模块需要将视图助手委托给其他模块时,必须将其添加到应用程序的视图中。如果你的视图帮助器依赖于它自己的模块(即使用模型),那么放入库中就不好了。
上面的代码允许模块热插入应用程序,而不会在主配置文件中进行任何其他更改,只需执行一次,并且在大多数情况下不会弄乱任何其他内容。
答案 5 :(得分:0)
我实际上有一个库文件夹,里面有视图和帮助文件夹。 我把常见的助手放在这个文件夹里。
我的结构:
-application
--modules
---modulea
---moduleb
-library
--view
---HELPER
我已使用set_include_path命令将库文件夹添加到我的包含路径。
答案 6 :(得分:0)
如果您将助手放在库路径中,它们将在任何地方自动加载。
library
Zend
View
Helper
YourHelper.php
Zend
Controller
Action
Helper
YourHelper.php
您可以将Zend
替换为您自己的命名空间,但您必须设置它,例如。在application.ini
:
resources.view.helperPath.Application_View_Helper = "Application/View/Helper"
resources.frontController.actionHelperPaths.Application_Controller_Action_Helper = "Application/Controller/Action/Helper"