Skip to content

Commit 85dfca9

Browse files
committed
Added input naming support for multiple selection.
1 parent d1c0179 commit 85dfca9

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/Widgets/ChoiceWidget.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,20 @@ public function setChoices(array $choices)
3333
$this->choices = $choices;
3434
}
3535

36+
public function buildName($name)
37+
{
38+
if ($this->allow_multiple_selected && substr($name, -2, 2) !== "[]") {
39+
$name = $name . "[]";
40+
}
41+
42+
return $name;
43+
}
44+
3645
public function getContext(string $name, $value, array $attrs = null)
3746
{
3847
$context = parent::getContext($name, $value, $attrs);
3948

49+
$context["name"] = $this->buildName($name);
4050
$context["options"] = implode($this->getSubWidgets($name, $value, $attrs));
4151

4252
return $context;
@@ -91,7 +101,7 @@ public function getSubWidgetContext(
91101
return array(
92102
"for" => $this->buildAutoId($name, $index),
93103
"type" => $this->input_type,
94-
"name" => htmlentities($name),
104+
"name" => htmlentities($this->buildName($name)),
95105
"value" => htmlentities($value),
96106
"label" => htmlentities($label),
97107
"attrs" => Attributes::flatatt($attrs),

tests/unit/Widgets/CheckboxSelectMultipleTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public function testRender()
1717
$expected =
1818
'<div>' .
1919
'<label for="id_name_1">' .
20-
'<input id="id_name_1" name="name" type="checkbox" value="option1"/> option1' .
20+
'<input id="id_name_1" name="name[]" type="checkbox" value="option1"/> option1' .
2121
'</label>' .
2222
'<label for="id_name_2">' .
23-
'<input id="id_name_2" name="name" type="checkbox" value="option2"/> option2'.
23+
'<input id="id_name_2" name="name[]" type="checkbox" value="option2"/> option2'.
2424
'</label>' .
2525
'</div>';
2626

@@ -32,10 +32,10 @@ public function testRenderChecked()
3232
$expected =
3333
'<div>' .
3434
'<label for="id_name_1">' .
35-
'<input id="id_name_1" name="name" type="checkbox" checked="checked" value="option1"/> option1' .
35+
'<input id="id_name_1" name="name[]" type="checkbox" checked="checked" value="option1"/> option1' .
3636
'</label>' .
3737
'<label for="id_name_2">' .
38-
'<input id="id_name_2" name="name" type="checkbox" value="option2"/> option2'.
38+
'<input id="id_name_2" name="name[]" type="checkbox" value="option2"/> option2'.
3939
'</label>' .
4040
'</div>';
4141

@@ -54,16 +54,16 @@ public function testRenderMultipleChecked()
5454
$expected =
5555
'<div>' .
5656
'<label for="id_name_1">' .
57-
'<input id="id_name_1" name="name" type="checkbox" value="option1"/> option1' .
57+
'<input id="id_name_1" name="name[]" type="checkbox" value="option1"/> option1' .
5858
'</label>' .
5959
'<label for="id_name_2">' .
60-
'<input id="id_name_2" name="name" type="checkbox" checked="checked" value="option2"/> option2'.
60+
'<input id="id_name_2" name="name[]" type="checkbox" checked="checked" value="option2"/> option2'.
6161
'</label>' .
6262
'<label for="id_name_3">' .
63-
'<input id="id_name_3" name="name" type="checkbox" checked="checked" value="option3"/> option3'.
63+
'<input id="id_name_3" name="name[]" type="checkbox" checked="checked" value="option3"/> option3'.
6464
'</label>' .
6565
'<label for="id_name_4">' .
66-
'<input id="id_name_4" name="name" type="checkbox" value="option4"/> option4'.
66+
'<input id="id_name_4" name="name[]" type="checkbox" value="option4"/> option4'.
6767
'</label>' .
6868
'</div>';
6969

tests/unit/Widgets/SelectMultipleTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public function setUp()
1414

1515
public function testRender()
1616
{
17-
$expected = '<select id="id_name" multiple="multiple" name="name">' .
17+
$expected = '<select id="id_name" multiple="multiple" name="name[]">' .
1818
'<option value="option1">option1</option>' .
1919
'<option value="option2">option2</option>' .
2020
'</select>';
@@ -24,7 +24,7 @@ public function testRender()
2424

2525
public function testRenderSelected()
2626
{
27-
$expected = '<select id="id_name" multiple="multiple" name="name">' .
27+
$expected = '<select id="id_name" multiple="multiple" name="name[]">' .
2828
'<option value="option1" selected="selected">option1</option>' .
2929
'<option value="option2">option2</option>' .
3030
'</select>';
@@ -41,7 +41,7 @@ public function testRenderMultipleSelected()
4141
"option4" => "option4",
4242
]);
4343

44-
$expected = '<select id="id_name" multiple="multiple" name="name">' .
44+
$expected = '<select id="id_name" multiple="multiple" name="name[]">' .
4545
'<option value="option1">option1</option>' .
4646
'<option value="option2" selected="selected">option2</option>' .
4747
'<option value="option3" selected="selected">option3</option>' .

0 commit comments

Comments
 (0)