Просмотр исходного кода

[ZF-11831] Zend_Form
Fixed issue with passing of default translator from form to subforms


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24515 44c647ce-9c0f-0410-b52a-842ac1e357ba

adamlundrigan 14 лет назад
Родитель
Сommit
a7d235ad45
2 измененных файлов с 57 добавлено и 1 удалено
  1. 2 1
      library/Zend/Form.php
  2. 55 0
      tests/Zend/Form/FormTest.php

+ 2 - 1
library/Zend/Form.php

@@ -2254,7 +2254,8 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
             }
         }
         foreach ($this->getSubForms() as $key => $form) {
-            if (null !== $translator && !$form->hasTranslator()) {
+            if (null !== $translator && $this->hasTranslator()
+                    && !$form->hasTranslator()) {
                 $form->setTranslator($translator);
             }
             if (isset($data[$key]) && !$form->isArray()) {

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

@@ -4479,6 +4479,61 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $count = substr_count($html, 'randomelementname-element');
         $this->assertEquals(1, $count, $html);
     }
+    
+    /**
+     * @group ZF-11831
+     */
+    public function testElementsOfSubFormReceiveCorrectDefaultTranslator()
+    {
+        // Global default translator
+        $trDefault = new Zend_Translate(array(
+            'adapter' => 'array',
+            'content' => array(
+                Zend_Validate_NotEmpty::IS_EMPTY => 'Default'
+            ),
+            'locale' => 'en'
+        ));
+        Zend_Registry::set('Zend_Translate', $trDefault);
+        
+        // Translator to use for elements
+        $trElement = new Zend_Translate(array(
+            'adapter' => 'array',
+            'content' => array(
+                Zend_Validate_NotEmpty::IS_EMPTY =>'Element'
+            ),
+            'locale' => 'en'
+        ));
+        Zend_Validate_Abstract::setDefaultTranslator($trElement);
+        
+        // Change the form's translator
+        $form = new Zend_Form();
+        $form->addElement(new Zend_Form_Element_Text('foo', array(
+            'required'   => true,
+            'validators' => array('NotEmpty')
+        )));
+        
+        // Create a subform with it's own validator
+        $sf1 = new Zend_Form_SubForm();
+        $sf1->addElement(new Zend_Form_Element_Text('foosub', array(
+            'required'   => true,
+            'validators' => array('NotEmpty')
+        )));
+        $form->addSubForm($sf1, 'Test1');
+        
+        $form->isValid(array());
+
+        $messages = $form->getMessages();
+        $this->assertEquals(
+            'Element', 
+            @$messages['foo'][Zend_Validate_NotEmpty::IS_EMPTY], 
+            'Form element received wrong validator'
+        );
+        $this->assertEquals(
+            'Element', 
+            @$messages['Test1']['foosub'][Zend_Validate_NotEmpty::IS_EMPTY], 
+            'SubForm element received wrong validator'
+        );        
+    }
 }
 
 class Zend_Form_FormTest_DisplayGroup extends Zend_Form_DisplayGroup