我不明白如何将带有选项的数组发送到我的自定义过滤器。你能帮我吗?
class Core_Filter_MyFilter implements Zend_Filter_Interface
{
public function __construct($options = null)
...
}
class Blog_Form_Comment extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->addElementPrefixPath('Core_Filter', 'Core/Filter/', 'filter');
$this->addElement('textarea', 'entry', array(
'filters' => array(MyFilter)));
我尝试了几种不同的方法,但我只能将字符串作为选项发送给构造函数,但我需要能够发送数组。
最佳答案
您可以将过滤器的实例直接传递给元素,而不是依赖 PluginLoader
从字符串名称表示形式加载过滤器类。
$this->addElement('textarea', 'entry', array(
'filters' => array(new Core_Filter_MyFilter($filterOptions))
));
这也适用于 addFilter()
方法。
此外,虽然引用手册中没有提及,但过滤器支持与验证器类似的语法。因此,利用插件加载器,您可以使用短名称和参数数组传递给构造函数,如下所示:
$this->addElement('textarea', 'entry', array(
'filters' => array(
array('MyFilter', array($filterOptions)
)
));
但是,请注意,如果您处于性能关键情况,以这种方式依赖插件加载器可能会产生不必要的开销。 form 元素依赖 PHP 的反射系统来创建过滤器实例并向其传递您的选项。 PHP 的运行时反射并不以速度而著称。这可能是也可能不是微观/过早的优化,我不建议任何一种方式,只是列出相关的警告。
关于zend-framework - Zend_Framework : Pass array options to a custom filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260923/