Skip to content

Commit

Permalink
[hotfix/ZF-11831] Zend_Form
Browse files Browse the repository at this point in the history
Form's default translator incorrectly passed to subforms, causing override of subform elements' default translators
  • Loading branch information
adamlundrigan committed Oct 21, 2011
1 parent f4e41ab commit 2558573
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 1 deletion.
3 changes: 2 additions & 1 deletion library/Zend/Form/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -2248,7 +2248,8 @@ public function isValid($data)
}
}
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()) {
Expand Down
55 changes: 55 additions & 0 deletions tests/Zend/Form/FormTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4237,4 +4237,59 @@ public function testAddDecoratorsKeepsNonNumericKeyNames()
$t2 = $this->form->getDecorators();
$this->assertEquals($t1, $t2);
}

/**
* @group ZF-11831
*/
public function testElementsOfSubFormReceiveCorrectDefaultTranslator()
{
// Global default translator
$trDefault = new \Zend\Translator\Translator(array(
'adapter' => 'arrayAdapter',
'content' => array(
\Zend\Validator\NotEmpty::IS_EMPTY => 'Default'
),
'locale' => 'en'
));
\Zend\Registry::set('Zend_Translate', $trDefault);

// Translator to use for elements
$trElement = new \Zend\Translator\Translator(array(
'adapter' => 'arrayAdapter',
'content' => array(
\Zend\Validator\NotEmpty::IS_EMPTY =>'Element'
),
'locale' => 'en'
));
\Zend\Validator\AbstractValidator::setDefaultTranslator($trElement);

// Change the form's translator
$form = new 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 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\Validator\NotEmpty::IS_EMPTY],
'Form element received wrong validator'
);
$this->assertEquals(
'Element',
@$messages['Test1']['foosub'][\Zend\Validator\NotEmpty::IS_EMPTY],
'SubForm element received wrong validator'
);
}
}

0 comments on commit 2558573

Please sign in to comment.