Browse Source

Allow attributes to be passed to RadioWidget & MultiCheckboxWidget
This currently already works with CheckboxWidget

lilHermit 9 years ago
parent
commit
116f799a4e

+ 2 - 2
src/View/Widget/MultiCheckboxWidget.php

@@ -167,7 +167,7 @@ class MultiCheckboxWidget implements WidgetInterface
             if (empty($checkbox['id'])) {
                 $checkbox['id'] = $this->_id($checkbox['name'], $checkbox['value']);
             }
-            $out[] = $this->_renderInput($checkbox, $context);
+            $out[] = $this->_renderInput($checkbox + $data, $context);
         }
 
         return $out;
@@ -188,7 +188,7 @@ class MultiCheckboxWidget implements WidgetInterface
             'templateVars' => $checkbox['templateVars'],
             'attrs' => $this->_templates->formatAttributes(
                 $checkbox,
-                ['name', 'value', 'text']
+                ['name', 'value', 'text', 'options', 'label', 'val', 'type', 'hiddenField']
             )
         ]);
 

+ 1 - 1
src/View/Widget/RadioWidget.php

@@ -187,7 +187,7 @@ class RadioWidget implements WidgetInterface
             'name' => $radio['name'],
             'value' => $escape ? h($radio['value']) : $radio['value'],
             'templateVars' => $radio['templateVars'],
-            'attrs' => $this->_templates->formatAttributes($radio, ['name', 'value', 'text']),
+            'attrs' => $this->_templates->formatAttributes($radio + $data, ['name', 'value', 'text', 'options', 'label', 'val', 'type']),
         ]);
 
         $label = $this->_renderLabel(

+ 82 - 0
tests/TestCase/View/Helper/FormHelperTest.php

@@ -8496,4 +8496,86 @@ class FormHelperTest extends TestCase
         ];
         $this->assertHtml($expected, $result);
     }
+
+    /**
+     * testRadioAttributes method
+     *
+     * Test generation of radio widget with additional attributes.
+     *
+     * @return void
+     */
+    public function testRadioAttributes()
+    {
+        $result = $this->Form->radio('Model.field', ['option A'], ['class' => 'my-class', 'data-ref' => 'custom-attr']);
+        $expected = [
+            'input' => ['type' => 'hidden', 'name' => 'Model[field]', 'value' => ''],
+            'label' => ['for' => 'model-field-0'],
+            ['input' => [
+                'type' => 'radio', 'name' => 'Model[field]',
+                'value' => '0', 'id' => 'model-field-0',
+                'class' => 'my-class', 'data-ref' => 'custom-attr'
+            ]],
+            'option A',
+            '/label'
+        ];
+        $this->assertHtml($expected, $result);
+    }
+
+    /**
+     * testCheckboxAttributes method
+     *
+     * Test generation of checkbox widget with additional attributes.
+     *
+     * @return void
+     */
+    public function testCheckboxAttributes()
+    {
+        $result = $this->Form->checkbox('Model.field', ['class' => 'my-class', 'data-ref' => 'custom-attr']);
+        $expected = [
+            'input' => ['type' => 'hidden', 'name' => 'Model[field]', 'value' => '0'],
+            ['input' => [
+                'type' => 'checkbox', 'name' => 'Model[field]',
+                'value' => '1', 'class' => 'my-class',
+                'data-ref' => 'custom-attr'
+            ]]
+        ];
+        $this->assertHtml($expected, $result);
+    }
+
+    /**
+     * testMultiCheckboxAttributes method
+     *
+     * Test generation of multiple checkboxes with additional attributes
+     *
+     * @return void
+     */
+    public function testMultiCheckboxAttributes()
+    {
+        $result = $this->Form->multiCheckbox('category', ['1', '2'], ['class' => 'my-class', 'data-ref' => 'custom-attr']);
+
+        $expected = [
+            'input' => ['type' => 'hidden', 'name' => 'category', 'value' => ''],
+            ['div' => ['class' => 'checkbox']],
+            ['label' => ['for' => 'category-0']],
+            ['input' => [
+                'type' => 'checkbox', 'name' => 'category[]',
+                'value' => '0', 'id' => 'category-0',
+                'class' => 'my-class', 'data-ref' => 'custom-attr'
+            ]],
+            '1',
+            '/label',
+            '/div',
+            ['div' => ['class' => 'checkbox']],
+            ['label' => ['for' => 'category-1']],
+            ['input' => [
+                'type' => 'checkbox', 'name' => 'category[]',
+                'value' => '1', 'id' => 'category-1',
+                'class' => 'my-class', 'data-ref' => 'custom-attr'
+            ]],
+            '2',
+            '/label',
+            '/div'
+        ];
+        $this->assertHtml($expected, $result);
+    }
 }