Browse Source

Fix label element for attributes not matching their inputs.

Radio elements would contain ModelModelFieldValue instead of
ModelFieldValue like they should. This was caused by the fix for #3936
and lack of tests for create() + radio().

Fixes #4071
mark_story 12 years ago
parent
commit
5ec9b145bf

+ 21 - 0
lib/Cake/Test/Case/View/Helper/FormHelperTest.php

@@ -4098,6 +4098,27 @@ class FormHelperTest extends CakeTestCase {
 	}
 
 /**
+ * Test that label id's match the input element id's when radio is called after create().
+ *
+ * @return void
+ */
+	public function testRadioWithCreate() {
+		$this->Form->create('Model');
+		$result = $this->Form->radio('recipient',
+			array('1' => '1', '2' => '2', '3' => '3'),
+			array('legend' => false, 'value' => '1')
+		);
+		$this->assertTextNotContains(
+			'<label for="ModelModelRecipient1">1</label>',
+			$result
+		);
+		$this->assertTextContains(
+			'<label for="ModelRecipient1">1</label>',
+			$result
+		);
+	}
+
+/**
  * testSelect method
  *
  * Test select element generation.

+ 3 - 1
lib/Cake/View/Helper/FormHelper.php

@@ -1520,7 +1520,9 @@ class FormHelper extends AppHelper {
 			);
 
 			if ($label) {
-				$optTitle = $this->label($tagName, $optTitle, is_array($label) ? $label : null);
+				$labelOpts = is_array($label) ? $label : array();
+				$labelOpts += array('for' => $tagName);
+				$optTitle = $this->label($tagName, $optTitle, $labelOpts);
 			}
 
 			if (is_array($between)) {