From 1f143270850a224eee9968367d0891a8419b8dc0 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Sat, 11 Jun 2011 20:07:42 -0400 Subject: [PATCH] Stub out the OutputFilter --- http/output_filter.php | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 http/output_filter.php diff --git a/http/output_filter.php b/http/output_filter.php new file mode 100644 index 0000000..7ffde90 --- /dev/null +++ b/http/output_filter.php @@ -0,0 +1,84 @@ +. + +namespace hoplite\http; + +require_once HOPLITE_ROOT . 'http/response_code.php'; + +/*! + The OutputFilter is executed after all Actions have been processed. The + primary function is to generate the actual HTTP response body from the model + data contained within the http\Response. Depending on how the Request was + sent, this +*/ +class OutputFilter +{ + /*! @var RootController */ + private $controller; + + /*! + Constructor that takes a reference to the RootController. + */ + public function __construct(RootController $controller) + { + $this->controller = $controller; + } + + /*! Accessor for the RootController. */ + public function controller() { return $this->controller; } + + /*! @brief Main entry point for output filtering + This is called from the RootController to begin processing the output and + generating the response. + */ + public function FilterOutput(Request $request, Response $response) + { + // If there was an error during the processing of an action, allow hooking + // custom logic. + if ($response->response_code != ResponseCode::OK) + if (!$this->_ContinueHandlingResponseForCode($request, $response)) + return; + + // If there's already raw data for the body, just output that. + if ($response->body) + return; + + // Otherwise, construct the body based on how the Request was received and + // any other information in the response. + $this->_CreateBodyForResponse($request, $response); + } + + /*! + If the request did not generate an 200 response code, the filter gives the + client an opportunity to override the normal output control flow and perform + some other task. If you want the control flow to continue executing as + normal, return TRUE; otherwise, return FALSE to exit from ::FilterOutput(). + @return boolean + */ + protected function _ContinueHandlingResponseForCode(Request $request, + Response $response) + { + return TRUE; + } + + /*! + Fills out the Response#data field. This could be an evaluated HTML template, + a JSON payload, XML, or any other type of response for the client. + */ + protected function _CreateBodyForResponse(Request $request, + Response $response) + {} +} -- 2.22.5