From 26d8351af4e2ad0096287313beec8cf96ee79829 Mon Sep 17 00:00:00 2001 From: ADmad Date: Thu, 1 Nov 2012 05:04:37 +0530 Subject: [PATCH] Fixing "required" field detection again. Closes #3305 --- .../Test/Case/View/Helper/FormHelperTest.php | 18 ++++++++++++++++++ lib/Cake/View/Helper/FormHelper.php | 10 +++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index 89b37c724c6..fd97171e04d 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -115,6 +115,10 @@ class Contact extends CakeTestModel { 'required_one' => array('required' => array('rule' => array('notEmpty'))), 'imnotrequired' => array('required' => false, 'rule' => 'alphaNumeric', 'allowEmpty' => true), 'imalsonotrequired' => array( + 'alpha' => array('rule' => 'alphaNumeric', 'allowEmpty' => true), + 'between' => array('rule' => array('between', 5, 30)), + ), + 'imalsonotrequired2' => array( 'alpha' => array('rule' => 'alphaNumeric', 'allowEmpty' => true), 'between' => array('rule' => array('between', 5, 30), 'allowEmpty' => true), ), @@ -7060,6 +7064,20 @@ public function testFormInputRequiredDetection() { ); $this->assertTags($result, $expected); + $result = $this->Form->input('Contact.imalsonotrequired2'); + $expected = array( + 'div' => array('class' => 'input text'), + 'label' => array('for' => 'ContactImalsonotrequired2'), + 'Imalsonotrequired2', + '/label', + 'input' => array( + 'type' => 'text', 'name' => 'data[Contact][imalsonotrequired2]', + 'id' => 'ContactImalsonotrequired2' + ), + '/div' + ); + $this->assertTags($result, $expected); + $result = $this->Form->input('Contact.imnotrequiredeither'); $expected = array( 'div' => array('class' => 'input text'), diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index 24f586801d9..34c344c3d87 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -247,11 +247,15 @@ protected function _isRequiredField($validationRules) { if (empty($validationRules) || count($validationRules) === 0) { return false; } + + $isUpdate = $this->requestType === 'put'; foreach ($validationRules as $rule) { - $rule->isUpdate($this->requestType === 'put'); - if (!$rule->isEmptyAllowed()) { - return true; + $rule->isUpdate($isUpdate); + if ($rule->skip()) { + continue; } + + return !$rule->allowEmpty; } return false; }