Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit c0ba21c

Browse files
committed
Merge branch 'feature/http-request-accessors'

File tree

4 files changed

+190
-21
lines changed

4 files changed

+190
-21
lines changed

src/PhpEnvironment/Request.php

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,18 +294,24 @@ public function setServer(ParametersInterface $server)
294294
}
295295

296296
/**
297-
* Return the parameter container responsible for server parameters
297+
* Return the parameter container responsible for server parameters or a single parameter value.
298298
*
299+
* @param string|null $name Parameter name to retrieve, or null to get the whole container.
300+
* @param mixed|null $default Default value to use when the parameter is missing.
299301
* @see http://www.faqs.org/rfcs/rfc3875.html
300-
* @return ParametersInterface
302+
* @return \Zend\Stdlib\ParametersInterface|mixed
301303
*/
302-
public function getServer()
304+
public function getServer($name = null, $default = null)
303305
{
304306
if ($this->serverParams === null) {
305307
$this->serverParams = new Parameters();
306308
}
307309

308-
return $this->serverParams;
310+
if($name === null){
311+
return $this->serverParams;
312+
}
313+
314+
return $this->serverParams->get($name, $default);
309315
}
310316

311317
/**
@@ -322,17 +328,23 @@ public function setEnv(ParametersInterface $env)
322328
}
323329

324330
/**
325-
* Return the parameter container responsible for env parameters
331+
* Return the parameter container responsible for env parameters or a single parameter value.
326332
*
327-
* @return ParametersInterface
333+
* @param string|null $name Parameter name to retrieve, or null to get the whole container.
334+
* @param mixed|null $default Default value to use when the parameter is missing. * @return \Zend\Stdlib\ParametersInterface
335+
* @return \Zend\Stdlib\ParametersInterface|mixed
328336
*/
329-
public function getEnv()
337+
public function getEnv($name = null, $default = null)
330338
{
331339
if ($this->envParams === null) {
332340
$this->envParams = new Parameters();
333341
}
334342

335-
return $this->envParams;
343+
if($name === null){
344+
return $this->envParams;
345+
}
346+
347+
return $this->envParams->get($name, $default);
336348
}
337349

338350
/**

src/Request.php

Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -225,17 +225,23 @@ public function setQuery(ParametersInterface $query)
225225
}
226226

227227
/**
228-
* Return the parameter container responsible for query parameters
228+
* Return the parameter container responsible for query parameters or a single query parameter
229229
*
230-
* @return \Zend\Stdlib\ParametersInterface
230+
* @param string|null $name Parameter name to retrieve, or null to get the whole container.
231+
* @param mixed|null $default Default value to use when the parameter is missing.
232+
* @return \Zend\Stdlib\ParametersInterface|mixed
231233
*/
232-
public function getQuery()
234+
public function getQuery($name = null, $default = null)
233235
{
234236
if ($this->queryParams === null) {
235237
$this->queryParams = new Parameters();
236238
}
237239

238-
return $this->queryParams;
240+
if($name === null){
241+
return $this->queryParams;
242+
}
243+
244+
return $this->queryParams->get($name, $default);
239245
}
240246

241247
/**
@@ -252,17 +258,23 @@ public function setPost(ParametersInterface $post)
252258
}
253259

254260
/**
255-
* Return the parameter container responsible for post parameters
261+
* Return the parameter container responsible for post parameters or a single post parameter.
256262
*
257-
* @return \Zend\Stdlib\ParametersInterface
263+
* @param string|null $name Parameter name to retrieve, or null to get the whole container.
264+
* @param mixed|null $default Default value to use when the parameter is missing.
265+
* @return \Zend\Stdlib\ParametersInterface|mixed
258266
*/
259-
public function getPost()
267+
public function getPost($name = null, $default = null)
260268
{
261269
if ($this->postParams === null) {
262270
$this->postParams = new Parameters();
263271
}
264272

265-
return $this->postParams;
273+
if($name === null){
274+
return $this->postParams;
275+
}
276+
277+
return $this->postParams->get($name, $default);
266278
}
267279

268280
/**
@@ -290,17 +302,62 @@ public function setFiles(ParametersInterface $files)
290302
}
291303

292304
/**
293-
* Return the parameter container responsible for file parameters
305+
* Return the parameter container responsible for file parameters or a single file.
294306
*
295-
* @return ParametersInterface
307+
* @param string|null $name Parameter name to retrieve, or null to get the whole container.
308+
* @param mixed|null $default Default value to use when the parameter is missing.
309+
* @return ParametersInterface|mixed
296310
*/
297-
public function getFiles()
311+
public function getFiles($name = null, $default = null)
298312
{
299313
if ($this->fileParams === null) {
300314
$this->fileParams = new Parameters();
301315
}
302316

303-
return $this->fileParams;
317+
if($name === null){
318+
return $this->fileParams;
319+
}
320+
321+
return $this->fileParams->get($name, $default);
322+
}
323+
324+
/**
325+
* Return the header container responsible for headers or all headers of a certain name/type
326+
*
327+
* @see \Zend\Http\Headers::get()
328+
* @param string|null $name Header name to retrieve, or null to get the whole container.
329+
* @param mixed|null $default Default value to use when the requested header is missing.
330+
* @return \Zend\Http\Headers|bool|\Zend\Http\Header\HeaderInterface|\ArrayIterator
331+
*/
332+
public function getHeaders($name = null, $default = false)
333+
{
334+
if ($this->headers === null || is_string($this->headers)) {
335+
// this is only here for fromString lazy loading
336+
$this->headers = (is_string($this->headers)) ? Headers::fromString($this->headers) : new Headers();
337+
}
338+
339+
if($name === null){
340+
return $this->headers;
341+
}
342+
343+
if($this->headers->has($name)){
344+
return $this->headers->get($name);
345+
}
346+
347+
return $default;
348+
}
349+
350+
/**
351+
* Get all headers of a certain name/type.
352+
*
353+
* @see Request::getHeaders()
354+
* @param string|null $name Header name to retrieve, or null to get the whole container.
355+
* @param mixed|null $default Default value to use when the requested header is missing.
356+
* @return \Zend\Http\Headers|bool|\Zend\Http\Header\HeaderInterface|\ArrayIterator
357+
*/
358+
public function getHeader($name, $default = false)
359+
{
360+
return $this->getHeaders($name, $default);
304361
}
305362

306363
/**
@@ -440,4 +497,4 @@ public function toString()
440497
$str .= $this->getContent();
441498
return $str;
442499
}
443-
}
500+
}

test/PhpEnvironment/RequestTest.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
namespace ZendTest\Http\PhpEnvironment;
1212

1313
use PHPUnit_Framework_TestCase as TestCase;
14+
use Zend\Http\Headers;
15+
use Zend\Http\Header\GenericHeader;
1416
use Zend\Http\PhpEnvironment\Request;
1517

1618
class RequestTest extends TestCase
@@ -581,4 +583,54 @@ public function testRequestMapsPhpFies(array $files, array $expectedFiles)
581583
$request = new Request();
582584
$this->assertEquals($expectedFiles, $request->getFiles()->toArray());
583585
}
586+
587+
public function testParameterRetrievalDefaultValue()
588+
{
589+
$request = new Request();
590+
$p = new \Zend\Stdlib\Parameters(array(
591+
'foo' => 'bar'
592+
));
593+
$request->setQuery($p);
594+
$request->setPost($p);
595+
$request->setFiles($p);
596+
$request->setServer($p);
597+
$request->setEnv($p);
598+
599+
$default = 15;
600+
$this->assertSame($default, $request->getQuery('baz', $default));
601+
$this->assertSame($default, $request->getPost('baz', $default));
602+
$this->assertSame($default, $request->getFiles('baz', $default));
603+
$this->assertSame($default, $request->getServer('baz', $default));
604+
$this->assertSame($default, $request->getEnv('baz', $default));
605+
$this->assertSame($default, $request->getHeaders('baz', $default));
606+
$this->assertSame($default, $request->getHeader('baz', $default));
607+
}
608+
609+
public function testRetrievingASingleValueForParameters()
610+
{
611+
$request = new Request();
612+
$p = new \Zend\Stdlib\Parameters(array(
613+
'foo' => 'bar'
614+
));
615+
$request->setQuery($p);
616+
$request->setPost($p);
617+
$request->setFiles($p);
618+
$request->setServer($p);
619+
$request->setEnv($p);
620+
621+
$this->assertSame('bar', $request->getQuery('foo'));
622+
$this->assertSame('bar', $request->getPost('foo'));
623+
$this->assertSame('bar', $request->getFiles('foo'));
624+
$this->assertSame('bar', $request->getServer('foo'));
625+
$this->assertSame('bar', $request->getEnv('foo'));
626+
627+
$headers = new Headers();
628+
$h = new GenericHeader('foo','bar');
629+
$headers->addHeader($h);
630+
631+
$request->setHeaders($headers);
632+
$this->assertSame($headers, $request->getHeaders());
633+
$this->assertSame($h, $request->getHeaders()->get('foo'));
634+
$this->assertSame($h, $request->getHeader('foo'));
635+
}
584636
}

test/RequestTest.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
namespace ZendTest\Http;
1212

1313
use Zend\Http\Request;
14+
use Zend\Http\Headers;
15+
use Zend\Http\Header\GenericHeader;
1416

1517
class RequestTest extends \PHPUnit_Framework_TestCase
1618
{
@@ -45,6 +47,52 @@ public function testRequestAllowsSettingOfParameterContainer()
4547
$this->assertSame($p, $request->getQuery());
4648
$this->assertSame($p, $request->getPost());
4749
$this->assertSame($p, $request->getFiles());
50+
51+
$headers = new Headers();
52+
$request->setHeaders($headers);
53+
$this->assertSame($headers, $request->getHeaders());
54+
}
55+
56+
public function testRetrievingASingleValueForParameters()
57+
{
58+
$request = new Request();
59+
$p = new \Zend\Stdlib\Parameters(array(
60+
'foo' => 'bar'
61+
));
62+
$request->setQuery($p);
63+
$request->setPost($p);
64+
$request->setFiles($p);
65+
66+
$this->assertSame('bar', $request->getQuery('foo'));
67+
$this->assertSame('bar', $request->getPost('foo'));
68+
$this->assertSame('bar', $request->getFiles('foo'));
69+
70+
$headers = new Headers();
71+
$h = new GenericHeader('foo','bar');
72+
$headers->addHeader($h);
73+
74+
$request->setHeaders($headers);
75+
$this->assertSame($headers, $request->getHeaders());
76+
$this->assertSame($h, $request->getHeaders()->get('foo'));
77+
$this->assertSame($h, $request->getHeader('foo'));
78+
}
79+
80+
public function testParameterRetrievalDefaultValue()
81+
{
82+
$request = new Request();
83+
$p = new \Zend\Stdlib\Parameters(array(
84+
'foo' => 'bar'
85+
));
86+
$request->setQuery($p);
87+
$request->setPost($p);
88+
$request->setFiles($p);
89+
90+
$default = 15;
91+
$this->assertSame($default, $request->getQuery('baz', $default));
92+
$this->assertSame($default, $request->getPost('baz', $default));
93+
$this->assertSame($default, $request->getFiles('baz', $default));
94+
$this->assertSame($default, $request->getHeaders('baz', $default));
95+
$this->assertSame($default, $request->getHeader('baz', $default));
4896
}
4997

5098
public function testRequestPersistsRawBody()

0 commit comments

Comments
 (0)