/** * Executes a request. * * @param request Request to execute. * * @return Response Response to send. */ public function execute(Request $request) { try { $segments = $request->getPathSegments(); if (count($segments) > 0) { $firstSegment = $segments[0]; if (array_key_exists($firstSegment, $this->controllers)) { $controller = $this->controllers[$firstSegment]; $controllerRequest = $request->consume(); $resource = $controller->getResource($controllerRequest); if (isset($resource)) { $verb = $request->getVerb(); if (method_exists($resource, $verb)) { return $resource->{$verb}($controllerRequest); } else { return Response::notSupported(); } } } } return Response::notFound(); } catch (\Exception $e) { return Response::error($e->getMessage()); } }