. namespace hoplite\http2; require_once HOPLITE_ROOT . '/http2/middleware.php'; require_once HOPLITE_ROOT . '/http2/request.php'; require_once HOPLITE_ROOT . '/http2/response.php'; class DataResponse extends Response { public $data; public function __construct($data) { parent::__construct(); $this->data = $data; } public function generate() { throw new \Exception(__CLASS__ . ' cannot generate a response'); } } class JsonResponse extends Response { private $data; public function __construct(DataResponse $r) { $this->code = $r->code; $this->data = $r->data; } public function generate() { $this->headers['Content-Type'] = 'application/json'; parent::generate(); print json_encode($this->data); } } class JsonResponseFilter extends Middleware { public function execute(Request $request) { $response = $this->next->execute($request); if ($response instanceof DataResponse) { return new JsonResponse($response); } return $response; } }