Fixes #16629: ActiveField::inputOptions were not merged with options passed for radio and checkbox

This commit is contained in:
Paweł Jankowiak
2018-11-19 23:12:17 +01:00
committed by Alexander Makarov
parent 06227c7075
commit 8334ab3060
3 changed files with 83 additions and 1 deletions

View File

@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.16 under development
------------------------
- Bug #16629: ActiveField::inputOptions were not merged with options passed for radio and checkbox (paweljankowiak06)
- Bug #16648: Html::strtolower() was corrupting UTF-8 strings (Kolyunya)
- Bug #13977: Skip validation if file input does not exist (RobinKamps, s1lver)
- Bug #16183: Fixed when `yii\helpers\BaseFileHelper` sometimes returned wrong value (samdark, SilverFire, OndrejVasicek)

View File

@ -542,6 +542,8 @@ class ActiveField extends Component
*/
public function radio($options = [], $enclosedByLabel = true)
{
$options = array_merge($this->inputOptions, $options);
if ($enclosedByLabel) {
$this->parts['{input}'] = Html::activeRadio($this->model, $this->attribute, $options);
$this->parts['{label}'] = '';
@ -594,6 +596,8 @@ class ActiveField extends Component
*/
public function checkbox($options = [], $enclosedByLabel = true)
{
$options = array_merge($this->inputOptions, $options);
if ($enclosedByLabel) {
$this->parts['{input}'] = Html::activeCheckbox($this->model, $this->attribute, $options);
$this->parts['{label}'] = '';

View File

@ -584,6 +584,78 @@ HTML;
$this->assertEqualsWithoutLE($expectedValue, trim($actualValue));
}
public function testInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="text" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->input('text', ['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testTextInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="text" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->textInput(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testHiddenInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="hidden" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->hiddenInput(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testPasswordInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="password" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->passwordInput(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testTextareaInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<textarea id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->textarea(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testRadioInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="radio" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" value="1" data-id="3">';
$field = $this->activeField->radio(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testCheckboxInputOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<input type="checkbox" id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" value="1" data-id="3">';
$field = $this->activeField->checkbox(['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testDropdownListOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<select id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" data-id="3">';
$field = $this->activeField->dropDownList([0 => 'No', 1 => 'Yes'], ['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
public function testListboxOptionsAreMergedFromActiveField()
{
$this->removeLabelHintAndError();
$expectedValue = '<select id="activefieldtestmodel-attributename" class="form-control" name="ActiveFieldTestModel[attributeName]" size="4" data-id="3">';
$field = $this->activeField->listBox([0 => 'No', 1 => 'Yes'], ['data-id' => 3])->render();
self::assertContains($expectedValue, $field);
}
/**
* Helper methods.
*/
@ -597,6 +669,11 @@ HTML;
return $view;
}
private function removeLabelHintAndError()
{
$this->activeField->label(false)->error(false)->hint(false);
}
}
class ActiveFieldTestModel extends DynamicModel