瀏覽代碼

Fix inadvertent B/C break as a result of fixing ZF-9364

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21648 44c647ce-9c0f-0410-b52a-842ac1e357ba
rob 16 年之前
父節點
當前提交
10ddbd5676
共有 3 個文件被更改,包括 48 次插入2 次删除
  1. 2 2
      library/Zend/Form.php
  2. 10 0
      library/Zend/Form/Element.php
  3. 36 0
      tests/Zend/Form/FormTest.php

+ 2 - 2
library/Zend/Form.php

@@ -2031,7 +2031,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
         }
         }
 
 
         foreach ($this->getElements() as $key => $element) {
         foreach ($this->getElements() as $key => $element) {
-            if (null !== $translator && !$element->getTranslator()) {
+            if (null !== $translator && !$element->hasTranslator()) {
                 $element->setTranslator($translator);
                 $element->setTranslator($translator);
             }
             }
             if (!isset($data[$key])) {
             if (!isset($data[$key])) {
@@ -2079,7 +2079,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
 
 
         foreach ($data as $key => $value) {
         foreach ($data as $key => $value) {
             if (null !== ($element = $this->getElement($key))) {
             if (null !== ($element = $this->getElement($key))) {
-                if (null !== $translator && !$element->getTranslator()) {
+                if (null !== $translator && !$element->hasTranslator()) {
                     $element->setTranslator($translator);
                     $element->setTranslator($translator);
                 }
                 }
                 $valid = $element->isValid($value, $data) && $valid;
                 $valid = $element->isValid($value, $data) && $valid;

+ 10 - 0
library/Zend/Form/Element.php

@@ -413,6 +413,16 @@ class Zend_Form_Element implements Zend_Validate_Interface
         }
         }
         return $this->_translator;
         return $this->_translator;
     }
     }
+    
+    /**
+     * Does this element have its own specific translator?
+     * 
+     * @return bool
+     */
+    public function hasTranslator()
+    {
+        return (bool)$this->_translator;
+    }
 
 
     /**
     /**
      * Indicate whether or not translation should be disabled
      * Indicate whether or not translation should be disabled

+ 36 - 0
tests/Zend/Form/FormTest.php

@@ -3847,6 +3847,42 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(2, count($messages));
         $this->assertEquals(2, count($messages));
         $this->assertEquals('Element message', $messages['foo']['isEmpty']);
         $this->assertEquals('Element message', $messages['foo']['isEmpty']);
         $this->assertEquals('Form message', $messages['bar']['isEmpty']);
         $this->assertEquals('Form message', $messages['bar']['isEmpty']);
+    }
+    
+    /**
+     * @group ZF-9364
+     */
+    public function testElementTranslatorPreferredOverDefaultTranslator()
+    {
+        $defaultTranslations = array(
+            'isEmpty' => 'Default message',
+        );
+        $formTranslations = array(
+            'isEmpty' => 'Form message',
+        );        
+        $elementTranslations = array(
+            'isEmpty' => 'Element message',
+        );
+        $defaultTranslate = new Zend_Translate('array', $defaultTranslations);
+        $formTranslate = new Zend_Translate('array', $formTranslations);
+        $elementTranslate = new Zend_Translate('array', $elementTranslations);
+        
+        Zend_Registry::set('Zend_Translate', $defaultTranslate);
+        $this->form->setTranslator($formTranslate);        
+        $this->form->addElement('text', 'foo', array('required'=>true, 'translator'=>$elementTranslate));
+        $this->form->addElement('text', 'bar', array('required'=>true));
+
+        $this->assertFalse($this->form->isValid(array('foo'=>'', 'bar'=>'')));
+        $messages = $this->form->getMessages();
+        $this->assertEquals(2, count($messages));
+        $this->assertEquals('Element message', $messages['foo']['isEmpty']);
+        $this->assertEquals('Form message', $messages['bar']['isEmpty']);
+        
+        $this->assertFalse($this->form->isValidPartial(array('foo'=>'', 'bar'=>'')));
+        $messages = $this->form->getMessages();
+        $this->assertEquals(2, count($messages));
+        $this->assertEquals('Element message', $messages['foo']['isEmpty']);
+        $this->assertEquals('Form message', $messages['bar']['isEmpty']);
     }    
     }    
 
 
     /**
     /**