diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index 2ac533315..78ed898d0 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -1456,11 +1456,10 @@ class FormHelperTest extends CakeTestCase { */ public function testTagIsInvalid() { $Contact = ClassRegistry::getObject('Contact'); - $Contact->validationErrors[0]['email'] = array('Please provide an email'); + $Contact->validationErrors[0]['email'] = $expected = array('Please provide an email'); $this->Form->setEntity('Contact.0.email'); $result = $this->Form->tagIsInvalid(); - $expected = array('Please provide an email'); $this->assertEquals($expected, $result); $this->Form->setEntity('Contact.1.email'); @@ -1472,6 +1471,26 @@ class FormHelperTest extends CakeTestCase { $this->assertFalse($result); } +/** + * Test tagIsInvalid with validation errors from a saveMany + * + * @return void + */ + public function testTagIsInvalidSaveMany() { + $Contact = ClassRegistry::getObject('Contact'); + $Contact->validationErrors[0]['email'] = $expected = array('Please provide an email'); + + $this->Form->create('Contact'); + + $this->Form->setEntity('0.email'); + $result = $this->Form->tagIsInvalid(); + $this->assertEquals($expected, $result); + + $this->Form->setEntity('0.Contact.email'); + $result = $this->Form->tagIsInvalid(); + $this->assertEquals($expected, $result); + } + /** * Test validation errors. * @@ -8486,6 +8505,24 @@ class FormHelperTest extends CakeTestCase { $this->assertTags($result, array('div' => array('class' => 'error-message'), 'Error in field city', '/div')); } +/** + * test the correct display of multi-record form validation errors. + * + * @return void + */ + public function testSaveManyRecordFormValidationErrors() { + $this->Form->create('ValidateUser'); + $ValidateUser = ClassRegistry::getObject('ValidateUser'); + $ValidateUser->validationErrors[0]['ValidateItem']['name'] = array('Error in field name'); + + $result = $this->Form->error('0.ValidateUser.ValidateItem.name'); + $this->assertTags($result, array('div' => array('class' => 'error-message'), 'Error in field name', '/div')); + + $ValidateUser->validationErrors[0]['city'] = array('Error in field city'); + $result = $this->Form->error('ValidateUser.0.city'); + $this->assertTags($result, array('div' => array('class' => 'error-message'), 'Error in field city', '/div')); + } + /** * tests the ability to change the order of the form input placeholder "input", "label", "before", "between", "after", "error" * diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index ad331a8d7..db577155a 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -272,6 +272,13 @@ class FormHelper extends AppHelper { public function tagIsInvalid() { $entity = $this->entity(); $model = array_shift($entity); + + // 0.Model.field. Fudge entity path + if (empty($model) || is_numeric($model)) { + array_splice($entity, 1, 0, $model); + $model = array_shift($entity); + } + $errors = array(); if (!empty($entity) && isset($this->validationErrors[$model])) { $errors = $this->validationErrors[$model];