Browse Source

Fix ZF-9275: Zend_Form_Element overrides Zend_Validate DefaultTranslator. Thanks to Kim Blomqvist for the fix

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22833 44c647ce-9c0f-0410-b52a-842ac1e357ba
rob 15 years ago
parent
commit
3798e8e14f
2 changed files with 35 additions and 2 deletions
  1. 2 1
      library/Zend/Form.php
  2. 33 1
      tests/Zend/Form/FormTest.php

+ 2 - 1
library/Zend/Form.php

@@ -2222,7 +2222,8 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
         }
         $context = $data;
         foreach ($this->getElements() as $key => $element) {
-            if (null !== $translator && !$element->hasTranslator()) {
+            if (null !== $translator && $this->hasTranslator()
+                    && !$element->hasTranslator()) {
                 $element->setTranslator($translator);
             }
             $check = $data;

+ 33 - 1
tests/Zend/Form/FormTest.php

@@ -4196,7 +4196,39 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
 
         $this->assertEquals(array('sub' => array('valid' => 1234)), $this->form->getValidValues($data));
     }
-        
+
+     /**
+     * @group ZF-9275
+     */
+    public function testElementTranslatorNotOverriddenbyGlobalTranslatorDuringValidation()
+    {
+        $translator = new Zend_Translate('array', array('foo' => 'bar'));
+        Zend_Registry::set('Zend_Translate', $translator);
+
+        $this->form->addElement('text', 'foo');
+        $this->form->isValid(array());
+
+        $received = $this->form->foo->hasTranslator();
+        $this->assertSame(false, $received);
+    }
+
+     /**
+     * @group ZF-9275
+     */
+    public function testZendValidateDefaultTranslatorOverridesZendTranslateDefaultTranslator()
+    {
+        $translate = new Zend_Translate('array', array('isEmpty' => 'translate'));
+        Zend_Registry::set('Zend_Translate', $translate);
+
+        $translateValidate = new Zend_Translate('array', array('isEmpty' => 'validate'));
+        Zend_Validate_Abstract::setDefaultTranslator($translateValidate);
+
+        $this->form->addElement('text', 'foo', array('required'=>1));
+        $this->form->isValid(array());
+
+        $this->assertSame(array('isEmpty' => 'validate'), $this->form->foo->getMessages());
+    }
+
     /**
      * @group ZF-9494
      */