Zend_Translator
が に適用されている場合、カスタム要素の検証メッセージを設定することは絶対に不可能Zend_Form
です。私の例を見てください...
class App_Form extends Zend_Form
{
public function init()
{
parent::init();
//let's create and set translator for our form
$translations = array(
Zend_Validate_NotEmpty::IS_EMPTY => 'Value is required for this field.' //just one line of translations as example
);
$adapter = new Zend_Translator('array', $translations);
$this->setTranslator($adapter);
//now we're going to add some text element
$element = new Zend_Form_Element_Text('firstname');
$element
->setRequired(true)
->setFilters(array('StringTrim'))
->addValidator('NotEmpty')
;
//now we're overriding error message for key with name Zend_Validate_NotEmpty::IS_EMPTY
$element->getValidator('NotEmpty')->setMessage('Please enter your first name.', Zend_Validate_NotEmpty::IS_EMPTY);
$this->addElement($element);
if (!$this->isValid(array('firstname' => ''))) {
print_r($this->getErrorMessages());
//we'll still get "Value is required for this field." message
//if we will try to disable translator we'll get correct message "Value is required for this field."
}
}
}
このエラーは、Zend_Form::getErrorMessages()
メソッドが呼び出されたときに発生します。このメソッドは、現在のメッセージ テンプレートを翻訳されたメッセージ テンプレートで上書きします。
したがって、変更せずにこのタスクを完了することは不可能のようですZend_Validate_Abstract
何か案は?