If you’re sending raw data to ZF2 over http (perhaps a json document), you can use the “getContent()” method of Zend\Http\PhpEnvironment\Request.
How does this work in practice?
In a controller you might want to do something like this:
1
2
3
4
5
6
7
8
9
| <?php
namespace Application\Controller;</code>
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController {
public function indexAction() {
$data = $this->getRequest()->getContent(); |
<?php
namespace Application\Controller;</code>
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController {
public function indexAction() {
$data = $this->getRequest()->getContent();
But if you’re always expecting a certain format, say JSON, a controller plugin could give you back the array or object rather than a lot of json_decode calls in your controllers.
The plugin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php
namespace My\Mvc\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\Params as ZendParams;
class Params extends ZendParams {
public function fromJson() {
$body = $this->getController()->getRequest()->getContent();
if (!empty($body)) {
$json = json_decode($body, true);
if (!empty($json)) {
return $json;
}
}
return false;
}
} |
<?php
namespace My\Mvc\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\Params as ZendParams;
class Params extends ZendParams {
public function fromJson() {
$body = $this->getController()->getRequest()->getContent();
if (!empty($body)) {
$json = json_decode($body, true);
if (!empty($json)) {
return $json;
}
}
return false;
}
}
And then its as simple as:
1
2
| public function indexAction() {
$data = $this->params()->fromJson(); |
public function indexAction() {
$data = $this->params()->fromJson();
Help! Sometimes getContent() doesn’t return my data.
The method uses file_get_contents(‘php://input’) to get the raw data from the HTTP request. Unfortuantely, the php://input stream can only be read once per process. I did have a plug-in that called file_get_contents(‘php://input’) too, and if $request->getContent() gets called after this, it will be empty!