Отключить переводчик для Zend_Form_Element, но не его валидаторы - PullRequest
2 голосов
/ 30 августа 2011

У меня есть Zend_Form_Element_Select объект и около 3 тыс. Вариантов выбора. Когда заказчик попросил меня изучить возможности оптимизации, я провел некоторую отладочную трассировку и заметил, что было более 3 000 вызовов на Zend_Form_Element_Multi->_translateValue и чуть меньше на Zend_Form_Element_Multi->_translateOption. Я нашел возможность установить $elem->setDisableTranslator(true), который позаботился об этих переводах, в которых я не нуждался. Но проблема в том, что сообщения об ошибках больше не переводятся.

Я хотел бы знать, есть ли способ не переводить значения и параметры, а переводить сообщения Validator?

Я пробовал это:

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

но безрезультатно.

1 Ответ

2 голосов
/ 30 августа 2011

Я не вижу никакой опции в классах элементов, поэтому простым решением было бы расширение класса 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() или getMultiOptions(), которые вызывают _translateOption().

...