Skip to content

Commit

Permalink
Allow attributes to be passed to RadioWidget & MultiCheckboxWidget
Browse files Browse the repository at this point in the history
    This currently already works with CheckboxWidget
  • Loading branch information
lilHermit committed Feb 8, 2017
1 parent 8a4a496 commit 116f799
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/View/Widget/MultiCheckboxWidget.php
Expand Up @@ -167,7 +167,7 @@ protected function _renderInputs($data, $context)
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;
Expand All @@ -188,7 +188,7 @@ protected function _renderInput($checkbox, $context)
'templateVars' => $checkbox['templateVars'],
'attrs' => $this->_templates->formatAttributes(
$checkbox,
['name', 'value', 'text']
['name', 'value', 'text', 'options', 'label', 'val', 'type', 'hiddenField']
)
]);

Expand Down
2 changes: 1 addition & 1 deletion src/View/Widget/RadioWidget.php
Expand Up @@ -187,7 +187,7 @@ protected function _renderInput($val, $text, $data, $context)
'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(
Expand Down
82 changes: 82 additions & 0 deletions tests/TestCase/View/Helper/FormHelperTest.php
Expand Up @@ -8496,4 +8496,86 @@ public function testNestedLabelInput()
];
$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);
}
}

0 comments on commit 116f799

Please sign in to comment.