zend-framework - Zend_Framework : Pass array options to a custom filter

标签 zend-framework

我不明白如何将带有选项的数组发送到我的自定义过滤器。你能帮我吗?

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/

相关文章:

zend-framework - 将 Doctrine Extensions 集成到我的 ZF/Doctrine 2 项目中

php - 从 Zend 2 中的连接获取数据

php - SolrQuery 的 Zend_Paginator 适配器

php - ZF2 删除查询中的列引号

zend-framework - Zend框架中的密码确认

css - Zend Framework 中的打印与屏幕布局

zend-framework - Zend Framework 中的样式表单元素

php - 通过 javascript 调用禁用 zend 布局

mysql - 不同域但相同用户的两个相似应用程序

php - 尝试使用 Zend DB 表创建 'join' 语句 - zend Framework 2