Переглянути джерело

ZF-9593: correct getMessages() when isArray

- Patch by Christian Albrecht

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21902 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 роки тому
батько
коміт
d27027c311
2 змінених файлів з 28 додано та 21 видалено
  1. 19 21
      library/Zend/Form.php
  2. 9 0
      tests/Zend/Form/FormTest.php

+ 19 - 21
library/Zend/Form.php

@@ -2319,22 +2319,19 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
      */
     public function getMessages($name = null, $suppressArrayNotation = false)
     {
-        if ((null !== $name) && isset($this->_elements[$name])) {
-            return $this->getElement($name)->getMessages();
-        }
-
-        if ((null !== $name) && isset($this->_subForms[$name])) {
-            return $this->getSubForm($name)->getMessages(null, true);
-        }
-
-        $arrayKeys = array();
-        foreach ($this->getSubForms() as $key => $subForm) {
-            $array = $this->_getArrayName($subForm->getElementsBelongTo());
-            if (!empty($array)) {
-                if ($name == $array) {
-                    return $subForm->getMessages(null, true);
+        if (null !== $name) {
+            if (isset($this->_elements[$name])) {
+                return $this->getElement($name)->getMessages();
+            } else if (isset($this->_subForms[$name])) {
+                return $this->getSubForm($name)->getMessages(null, true);
+            }
+            foreach ($this->getSubForms() as $key => $subForm) {
+                if ($subForm->isArray()) {
+                    $belongTo = $subForm->getElementsBelongTo();
+                    if ($name == $this->_getArrayName($belongTo)) {
+                        return $subForm->getMessages(null, true);
+                    }
                 }
-                $arrayKeys[$key] = $subForm->getElementsBelongTo();
             }
         }
 
@@ -2353,14 +2350,15 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
         }
 
         foreach ($this->getSubForms() as $key => $subForm) {
-            $fMessages = $subForm->getMessages(null, true);
-            if (!empty($fMessages)) {
-                if (array_key_exists($key, $arrayKeys)) {
-                    $fMessages = $this->_attachToArray($fMessages, $arrayKeys[$key]);
-                    $messages = array_merge($messages, $fMessages);
+            $merge = $subForm->getMessages(null, true);
+            if (!empty($merge)) {
+                if (!$subForm->isArray()) {
+                    $merge = array($key => $merge);
                 } else {
-                    $messages[$key] = $fMessages;
+                    $merge = $this->_attachToArray($merge,
+                                                   $subForm->getElementsBelongTo());
                 }
+                $messages = array_merge_recursive($messages, $merge);
             }
         }
 

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

@@ -1608,6 +1608,15 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertSame($this->form->getValues(), $data['valid']);
     }
 
+    public function testGetMessagesWithElementsBelongTo()
+    {
+        $data = $this->_setup9350();
+        $this->form->isValid($data['invalid']);
+        $msgs = $this->form->getMessages();
+        $this->assertTrue(isset($msgs['foo']['foo']['foo']['foo']));
+        $this->assertTrue(isset($msgs['foo']['zoo']['iek']));
+    }
+
 
     // Display groups