我正在尝试一种方法来禁用“应用程序/视图/助手”中的一些视图助手......
我真正想要的是在 application.ini 上放置一些选项来启用或禁用一些 Helpers。
application.ini 上的示例:
helpers.Helper1=on
helpers.Helper2=off
现在的问题是,当一个助手关闭时,我想重写这个助手的一些功能,以便在视图上返回不同的结果。这样,我不需要更改视图脚本中的任何内容。
我想在不同的位置为每个助手有 2 个不同的 php 文件。一个带有真正的助手,另一个带有更改的助手(在 application.ini 上关闭时工作)。
问题是我不知道如何告诉视图应该加载哪个视图...
有谁知道怎么做?
最终代码
好的,经过多次尝试,我将其与以下代码一起使用:
引导程序
protected function _initConfigureHelpers(){
$this->bootstrap('view');
$view = $this->getResource('view');
$view->addHelperPath("./../library/ConfigHelpers","Configurable_Helper");
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_ViewPlugins());
return $view;
}
Application_Plugin_ViewPlugins
class Application_Plugin_ViewPlugins extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request){
$front=Zend_Controller_Front::getInstance();
$bootstrap=$front->getParam('bootstrap');
$options=$bootstrap->getOption("helpers");
if (is_array($options)){
$view = $bootstrap->getResource('view');
foreach($options as $option => $value){
$helper=$view->getHelper($option);
if ($helper){
if ($value=="off")
$helper->__disable();
else if ($value!="on")
throw new Exception('The value of helpers.'.$option.' must be "on" or "off" on application.ini.');
} else {
throw new Exception("Inexistent Helper");
}
}
}
}
}
修改的助手示例
require_once APPLICATION_HELPERS."CssCrush.php";
class Configurable_Helper_CssCrush extends Zend_View_Helper_CssCrush {
protected $__config_enabled = true;
public function __disable(){
$this->__config_enabled = false;
return $this;
}
public function __enable(){
$this->__config_enabled = true;
return $this;
}
public function cssCrush(){
if ($this->__config_enabled){
return parent::cssCrush();
} else{
return new Modified_CssCrush();
}
}
}
class Modified_CssCrush {
public static function file ( $file, $options = null ) {
return $file;
}
}
APPLICATION_HELPERS 在 /public/index.php 上定义为“../application/views/helpers/”。
现在,当我想添加一个可配置的助手时,我将原始助手放在“/application/views/helpers/”上,然后使用上面示例的结构在“/library/ConfigHelpers”上创建它的修改版本。