protected function do_before(context $ctx) { $ctx->results = h\collection(); $interfaces = array('GET' => '\\horn\\lib\\http_get', 'POST' => '\\horn\\lib\\http_post', 'PUT' => '\\horn\\lib\\http_put', 'DELETE' => '\\horn\\lib\\http_delete'); $http_method = $ctx->in->method; if (!isset($interfaces[$http_method])) { h\http\response_methods::method_not_allowed($ctx->out); $msg = sprintf('Non-supported method \'%s\' on \'%s\'', $http_method, $ctx->in->uri); $ctx->error_handling['status'] = false; $ctx->error_handling['messages'][] = $msg; return false; } $controller_class = $this->configuration['routes'][$ctx->route]; if (!class_exists($controller_class)) { $msg = sprintf('Undefined controller class \'%s\'', $controller_class); $ctx->error_handling['status'] = false; $ctx->error_handling['messages'][] = $msg; return false; } $ctrl = new $controller_class($ctx); if (!$ctrl instanceof $interfaces[$http_method]) { h\http\response_methods::method_not_allowed($ctx->out); $msg = sprintf('Non-supported method \'%s\' on \'%s\'', $http_method, $ctx->in->uri); $ctx->error_handling['status'] = false; $ctx->error_handling['messages'][] = $msg; return false; } try { $result = $ctrl->{"do_{$http_method}"}(); } catch (h\http\error $e) { $error = get_class($e); $error = substr($error, 1 + strrpos($error, '\\')); h\http\response_methods::$error($ctx->out); $result = array(false, null, array($e->getMessage())); } $ctx->error_handling['status'] = $result[0]; isset($result[1]) and $ctx->results->join($result[1]); isset($result[2]) and $ctx->error_handling['messages']->join($result[2]); return true; }
public function redirect_to_updated($to) { h\http\response_methods::ok($this->context->out); $this->location($to); }