禁用Zend_Form_Element的转换器,但不是它的验证器

时间:2011-08-30 11:05:02

标签: zend-framework zend-form zend-translate

我有一个Zend_Form_Element_Select对象,还有大约3k个选项。当客户要求我进一步研究优化可能性时,我做了一些调试跟踪,并注意到,Zend_Form_Element_Multi->_translateValue的调用次数超过3k,而Zend_Form_Element_Multi->_translateOption的调用少了一点。我找到了设置$elem->setDisableTranslator(true)的选项,它负责这些翻译,我没有必要。但现在的问题是,错误消息不再被翻译。

我想知道的是,如果有办法不翻译价值和选项,但翻译验证者消息?

我试过了:

foreach($operators->getValidators() as $val){
        $val->setDisableTranslator(false);
    }

但无济于事。

1 个答案:

答案 0 :(得分:2)

我在元素类中没有看到任何选项,因此简单的解决方案是使用您自己的类扩展Zend_Form_Element_Select类。然后,您可以按如下方式覆盖_translateOptions方法

class My_Form_Element_Select extends Zend_Form_Element_Select {

    protected function _translateOption($option,$value) {
        // or add more logic here
        return false;
    }
}

此外,您可以为此方案设置一些其他逻辑和选项,即打开/关闭选项的翻译。

如果您想要同时取消此通话,则必须覆盖正在呼叫getMultiOption()的{​​{1}}或getMultiOptions()