Skip to content

Commit cfc2f0e

Browse files
eliecharralsmith77
authored andcommitted
Previous fix was uncomplete
#960
1 parent dcd379b commit cfc2f0e

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

Request/ParamFetcher.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,6 @@ public function get($name, $strict = null)
123123
$strict = $config->strict;
124124
}
125125

126-
if ($config->array && (null !== $default || !$strict)) {
127-
$default = (array) $default;
128-
}
129-
130126
if ($config instanceof RequestParam) {
131127
$param = $this->request->request->get($config->getKey(), $default);
132128
} elseif ($config instanceof QueryParam) {
@@ -136,8 +132,14 @@ public function get($name, $strict = null)
136132
}
137133

138134
if ($config->array) {
135+
136+
if (($default !== null || !$strict) || $nullable)
137+
{
138+
$default = (array) $default;
139+
}
140+
139141
if (!is_array($param)) {
140-
if (!$nullable) {
142+
if ($strict && !$nullable) {
141143
throw new BadRequestHttpException(
142144
sprintf("%s parameter value of '%s' is not an array", $paramType, $name)
143145
);

Tests/Request/ParamFetcherTest.php

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ public function setup()
113113
$annotations['arr']->name = 'arr';
114114
$annotations['arr']->array = true;
115115

116+
$annotations['arr_null_strict'] = new RequestParam();
117+
$annotations['arr_null_strict']->name = 'arr_null_strict';
118+
$annotations['arr_null_strict']->array = true;
119+
$annotations['arr_null_strict']->nullable = true;
120+
$annotations['arr_null_strict']->strict = true;
121+
116122
$annotations['moo'] = new QueryParam();
117123
$annotations['moo']->name = 'mooh';
118124
$annotations['moo']->key = 'moo';
@@ -187,21 +193,21 @@ public static function validatesConfiguredParamDataProvider()
187193
array( // check that non-strict missing params take default value
188194
'foo',
189195
'1',
190-
array('foo' => '1', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
196+
array('foo' => '1', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
191197
array(),
192198
array('bar' => '2', 'baz' => '4', 'arr' => array()),
193199
),
194200
array( // pass Param in GET
195201
'foo',
196202
'42',
197-
array('foo' => '42', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
203+
array('foo' => '42', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
198204
array('foo' => '42'),
199205
array('bar' => '2', 'baz' => '4', 'arr' => array()),
200206
),
201207
array( // check that invalid non-strict params take default value
202208
'foo',
203209
'1',
204-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
210+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
205211
array('foo' => 'bar'),
206212
array('bar' => '1', 'baz' => '4', 'arr' => array()),
207213
function (\PHPUnit_Framework_MockObject_MockObject $validator, \PHPUnit_Framework_TestCase $self) {
@@ -220,32 +226,39 @@ function (\PHPUnit_Framework_MockObject_MockObject $validator, \PHPUnit_Framewor
220226

221227
},
222228
),
229+
array( // nullable array with strict
230+
'arr_null_strict',
231+
array(),
232+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
233+
array(),
234+
array('bar' => '1', 'baz' => '4', 'arr' => array()),
235+
),
223236
array( // invalid array
224237
'buzz',
225238
array(1),
226-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
239+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
227240
array('buzz' => 'invaliddata'),
228241
array('bar' => '1', 'baz' => '4', 'arr' => array()),
229242
),
230243
array( // invalid array (multiple depth)
231244
'buzz',
232245
array(1),
233-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
246+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
234247
array('buzz' => array(array(1))),
235248
array('bar' => '1', 'baz' => '4', 'arr' => array()),
236249
),
237250

238251
array( // multiple array
239252
'buzz',
240253
array(2, 3, 4),
241-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
254+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
242255
array('buzz' => array(2, 3, 4)),
243256
array('bar' => '1', 'baz' => '4', 'arr' => array()),
244257
),
245258
array( // multiple array with one invalid value
246259
'buzz',
247260
array(2, 1, 4),
248-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 1, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
261+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 1, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
249262
array('buzz' => array(2, 'invaliddata', 4)),
250263
array('bar' => '1', 'baz' => '4', 'arr' => array()),
251264
function (\PHPUnit_Framework_MockObject_MockObject $validator, \PHPUnit_Framework_TestCase $self) {
@@ -267,42 +280,42 @@ function (\PHPUnit_Framework_MockObject_MockObject $validator, \PHPUnit_Framewor
267280
array( // Array not provided in GET query
268281
'boo',
269282
array(),
270-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
283+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
271284
array('buzz' => array(2, 3, 4)),
272285
array('bar' => '1', 'baz' => '4', 'arr' => array()),
273286
),
274287
array( // QueryParam provided in GET query but as a scalar
275288
'boo',
276289
array(),
277-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
290+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array(), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
278291
array('buzz' => array(2, 3, 4), 'boo' => 'scalar'),
279292
array('bar' => '1', 'baz' => '4', 'arr' => array()),
280293
),
281294
array( // QueryParam provided in GET query with valid values
282295
'boo',
283296
array('1', 'foo', 5),
284-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
297+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
285298
array('buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5)),
286299
array('bar' => '1', 'baz' => '4', 'arr' => array()),
287300
),
288301
array( // QueryParam provided in GET query with valid values
289302
'boozz',
290303
null,
291-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => null, 'biz' => null, 'arr' => array(), 'moo' => null),
304+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => null, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
292305
array('buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5)),
293306
array('bar' => '1', 'baz' => '4', 'arr' => array()),
294307
),
295308
array( // QueryParam provided in GET query with valid values
296309
'boozz',
297310
5,
298-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5, 'biz' => null, 'arr' => array(), 'moo' => null),
311+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => null),
299312
array('buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5),
300313
array('bar' => '1', 'baz' => '4', 'boozz' => 5, 'arr' => array()),
301314
),
302315
array( // QueryParam provided in GET query with valid values
303316
'moo',
304317
'string',
305-
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5, 'biz' => null, 'arr' => array(), 'moo' => 'string'),
318+
array('foo' => '1', 'bar' => '1', 'baz' => '4', 'buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5, 'biz' => null, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => 'string'),
306319
array('buzz' => array(2, 3, 4), 'boo' => array('1', 'foo', 5), 'boozz' => 5, 'moo' => 'string'),
307320
array('bar' => '1', 'baz' => '4', 'boozz' => 5, 'arr' => array()),
308321
)
@@ -321,7 +334,7 @@ public function testValidatesAddParam()
321334
$queryFetcher->addParam($runtimeParam);
322335

323336
$this->assertEquals(10, $queryFetcher->get('bub'));
324-
$this->assertEquals(array('foo' => '1', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'bub' => 10, 'arr' => array(), 'moo' => ''), $queryFetcher->all());
337+
$this->assertEquals(array('foo' => '1', 'bar' => '2', 'baz' => '4', 'buzz' => array(1), 'boo' => array(), 'boozz' => null, 'biz' => null, 'bub' => 10, 'arr' => array(), 'arr_null_strict' => array(), 'moo' => ''), $queryFetcher->all());
325338
}
326339

327340
public function testValidatesConfiguredParamStrictly()

0 commit comments

Comments
 (0)