我希望在构造函数注入中设置MyFilter
中的某些属性,但在Zend_View::addFilter(string $filter_class_name)
中似乎不可行,因为它在使用时加载新实例。 MyFilter
implements Zend_Filter_Interface
。将过滤器注入Zend_View
可以以某种方式将实例的过滤器注入到Zend_View
的实例吗?
由于它(有希望)会被关闭到2.0,请参阅ticket on JIRA。
我希望在构造函数注入中设置MyFilter
中的某些属性,但在Zend_View::addFilter(string $filter_class_name)
中似乎不可行,因为它在使用时加载新实例。 MyFilter
implements Zend_Filter_Interface
。将过滤器注入Zend_View
可以以某种方式将实例的过滤器注入到Zend_View
的实例吗?
由于它(有希望)会被关闭到2.0,请参阅ticket on JIRA。
不能在1.x的分支,票申请:
您可以传递对象:
$filter = new Your_Filter($params); // implements Zend_Filter_Interface
$view->addFilter($filter);
你可以从视图解析器,例如获得视图实例使用staticHelper。
编辑:
另一种方法可能是:
class MyFilterSetup extends MyFilter implements Zend_Filter_Interface
{
public function __construct($params)
{
$this->_params = $params;
parent::__construct();
}
public function filter($string)
{
// .... $this->_params;
}
}
我不能肯定,但我不认为这是可能的。查看源代码setFilter()
和addFilter()
只接受Filter Classname作为字符串。您无法设置任何选项,例如您可以在Zend_Form
中进行设置。什么,你可以尽管做的是:
class MyFilter implements Zend_Filter_Interface
{
protected static $_config;
public static setConfig(array $options)
{
self::_config = $options;
}
// ... do something with the options
}
然后设置其中具有MyFilter::setOptions()
所需的选项,所以当Zend_View
实例的过滤器实例,它有什么保证其正常运行过滤器。
这几乎是一种选择,但不是很优雅。如果我想要添加两次相同的过滤器,但使用不同的设置? – chelmertz 2010-04-20 07:53:18
@chelmertz然后你可能不得不自定义'Zend_View'来做你想做的事情。或者将过滤器所经过的实例化的数目存储为另一个静态属性,并静态地为每个实例添加一个配置。这不太好,但会起作用。 – Gordon 2010-04-20 08:09:23
我宁愿使用'Zend_View :: render()'的输出并在其上应用过滤器,但它会消除与视图关联的过滤器的能力。如果没有我们错过的东西,我们会进一步推动。 – chelmertz 2010-04-20 08:26:30
我们不能创建扩展Zend_View
它覆盖addFilter()
方法的自定义视图对象接受一个类或一个实例。然后覆盖_filter()
方法来处理我们存储的两种类型的过滤器 - 字符串和实例。
我认为这是一个设计错误,应该在框架本身内进行修改。但我认为这是一个有效的解决方案,所以......为什么不修补它? :) – chelmertz 2010-10-06 19:01:00
哎呀,谢谢! – 2010-10-07 03:28:29
为什么不将过滤器属性分配给视图,然后在设置视图时设置属性,或者直接在过滤函数中访问视图?例如
$view->assign('MyFilterProperty', 'fubar');
,然后在过滤器类:
public function setView($aView)
{
$this->_property = $aView->MyFilterPropery;
}
这是缺憾,但它应该完成这项工作。
我不认为这种方法可行,因为1)过滤器将取决于(或劫持)每个属性,并且; 2)它不会过滤所有的输出。想象一下,我想在两个连续的调用中使用不同的参数在视图的正常渲染上应用调用'str_replace()'--functionality的过滤器(对于愚蠢的示例,抱歉:) – chelmertz 2011-04-14 18:28:21
我正在考虑使用像'Zend_View :: getFilter()'的东西,但该方法的作用就像':: setFilter()'..没有运气那里。 – chelmertz 2010-04-20 07:43:12
呃,似乎我找不到任何好的理由来投票结束。弃船。 – chelmertz 2010-04-20 18:23:26