Responses
Introduction
Prest is designed to work with Fractal’s Transformer concept to handle complex data output. Extending your custom controller from Prest\Mvc\Controllers\FractalController
provides you with several methods for creating different responses.
FractalController
createResponse
By default createResponse
takes $response
as argument and returns it. Overriding this method allows you to modify the response before it will be send:
namespace Acme\Controllers;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function createResponse($response)
{
if (/* some business related condition */) {
return $response;
}
return null;
}
}
createArrayResponse
Let’s say you want to return just an array with data, for instance an array with your session token:
namespace Acme\Controllers;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function authenticate()
{
// Some authentication code here
// We've successfully created a session
return $this->createArrayResponse([
'token' => $session->getToken(),
'expires' => $session->getExpirationTime(),
]);
}
}
Response:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ1c2VybmFtZSIsInN1YiI6IjEiLCJpYXQiOjE0NDk3NTY4MDAsImV4cCI6MjkwMDExODQwMH0.FE8VYcuh68fxqH17AjILWgcIrOkDp9Q6fBPneD_W4Rc",
"expires": 1450361600
}
createOkResponse
You might want to send just an OK response, for instance when you’ve successfully deleted something:
namespace Acme\Controllers;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function delete($identity)
{
// Some business logic here
return $this->createOkResponse();
}
}
Response:
{
"result": "OK"
}
createItemOkResponse
Send OK
along with item response. Example:
namespace Acme\Controllers;
use Acme\Transformer\ItemTransformer;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function find($identity)
{
// Some business logic here
return $this->createItemOkResponse($item, new ItemTransformer(), 'item');
}
}
Response:
{
"result": "OK",
"item": {
}
}
createItemResponse
Creates a Fractal Item response. Example:
namespace Acme\Controllers;
use Acme\Transformer\ItemTransformer;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function find($identity)
{
// Some business logic here
return $this->createItemResponse($item, new ItemTransformer(), 'item');
}
}
Response:
{
"item": {
}
}
createCollectionResponse
Creates a Fractal Collection response. Example:
namespace Acme\Controllers;
use Acme\Transformer\ItemTransformer;
use Prest\Mvc\Controllers\FractalController;
class CustomController extends FractalController
{
public function all()
{
// Some business logic here
return $this->createCollectionResponse($items, new ItemTransformer(), 'items');
}
}
Response:
{
"items": [{
}, {
}]
}