/** * @param WebRequest $request * @return Url */ private function getAbsoluteTarget(WebRequest $request) { $target = $this->getTarget(); if ($target->isAbsolute()) { return $target; } return Url::fromString($request->getContext() . '/' . $target); }
/** * @param \watoki\curir\delivery\WebRequest $request * @return \watoki\curir\delivery\WebResponse */ public function createResponse(WebRequest $request) { $formats = $request->getFormats(); foreach ($formats as $accepted) { if (array_key_exists($accepted, $this->renderers)) { return $this->respondWith($accepted); } } return $this->respondWithDefault($formats); }
/** * @param WebRequest $request * @throws \watoki\curir\error\HttpError * @return WebResponse */ public function createResponse(WebRequest $request) { $formats = $request->getFormats(); foreach ($formats as $format) { try { $response = new WebResponse($this->render($format)); $response->getHeaders()->set(WebResponse::HEADER_CONTENT_TYPE, MimeTypes::getType($format)); return $response; } catch (\ReflectionException $e) { } } throw new HttpError(WebResponse::STATUS_NOT_ACCEPTABLE, "Could not render the resource in an accepted format.", "Invalid accepted types: [" . $formats->join(', ') . "]"); }
/** * @return mixed */ function respond() { $response = new WebResponse($this->content); if (strpos($this->key, '.') !== false) { $parts = explode('.', $this->key); $response->getHeaders()->set(WebResponse::HEADER_CONTENT_TYPE, MimeTypes::getType(end($parts))); } else { if (!$this->webRequest->getFormats()->isEmpty()) { $response->getHeaders()->set(WebResponse::HEADER_CONTENT_TYPE, MimeTypes::getType($this->webRequest->getFormats()->first())); } } return $response; }
public function whenIGet_From($path, $resourceClass) { $request = $this->request->withTarget(Path::fromString($path))->withMethod('get'); $stub = new TestDelivererStub($request); $router = new NoneRouter(RespondingTarget::factory($this->factory, $this->factory->getInstance($resourceClass))); $delivery = new WebDelivery($router, $stub, $stub); $stub->onDeliver(function (WebResponse $response) { if ($response instanceof ErrorResponse) { throw $response->getException(); } $this->model = $response->getBody(); }); $delivery->run(); }
public function getBody() { $userMessage = ''; if ($this->exception instanceof HttpError) { $userMessage = $this->exception->getUserMessage(); } if ($this->request->getFormats()->contains('html')) { $model = array('status' => $this->getStatus(), 'rootUrl' => $this->request->getContext()->toString(), 'userMessage' => $userMessage); $details = date('Y-m-d H:i:s'); $exception = $this->exception; while ($exception) { $details .= "\n" . get_class($exception) . ": " . $exception->getMessage() . "\n" . $exception->getTraceAsString() . "\n"; $exception = $exception->getPrevious(); } $model['details'] = htmlentities($details); return $this->renderTemplate($model); } else { return $userMessage ?: get_class($this->exception) . ': ' . $this->exception->getMessage(); } }
public function dispatch(WebRequest $request, Router $router) { $arguments = $request->getArguments(); $request->setTarget($this->target); if ($arguments->isEmpty()) { $arguments->merge($this->arguments); $request->setMethod(WebRequest::METHOD_GET); } else { if ($arguments->has(self::$TARGET_KEY)) { $request->setTarget(Path::fromString($arguments->get(self::$TARGET_KEY))); } if ($arguments->has(WebRequest::$METHOD_KEY)) { $request->setMethod($arguments->get(WebRequest::$METHOD_KEY)); } else { $request->setMethod(WebRequest::METHOD_GET); } } $this->response = $router->route($request)->respond(); if ($this->response->getHeaders()->has(WebResponse::HEADER_LOCATION)) { throw new WrappedRedirection($this->response->getHeaders()->get(WebResponse::HEADER_LOCATION)); } return $request; }
private function getTarget(WebRequest $request) { return (string) $request->getContext()->appended($this->actionId)->withParameters(new Map($this->parameters)); }
private function isMapping(WebRequest $request) { return $this->boxes->isMapping() && !$request->getHeaders()->has(self::HEADER_NO_BOXING) && $request->getFormats()->contains('html'); }
private function wrapMappedTarget(WebRequest $request) { $prefixedBox = Wrapper::$PREFIX . $this->mappedBox; $request->getArguments()->set(Box::$PRIMARY_TARGET_KEY, $this->mappedBox); $arguments = new Map(); if ($request->getArguments()->has($prefixedBox)) { $arguments = $request->getArguments()->get($prefixedBox); } $target = $request->getTarget()->toString(); $request->setTarget(new Path()); if ($target) { $arguments->set(Box::$TARGET_KEY, $target); } foreach ($request->getArguments() as $key => $value) { if (substr($key, 0, strlen(Wrapper::$PREFIX)) != Wrapper::$PREFIX) { $arguments->set($key, $value); $request->getArguments()->remove($key); } } $request->getArguments()->set($prefixedBox, $arguments); }
private function updateCrumbs($actionId, ExecutionResult $result, WebRequest $request, ParameterReader $reader) { $action = $this->app->actions->getAction($actionId); $crumbs = $this->readCrumbs(); $current = ['target' => (string) $request->getContext()->appended($actionId)->withParameters(new Map($this->readRawParameters($action, $reader))), 'caption' => $action->caption()]; $newCrumbs = []; foreach ($crumbs as $crumb) { if ($crumb == $current) { break; } $newCrumbs[] = $crumb; } $newCrumbs[] = $current; if ($result instanceof RenderedResult) { $this->saveCrumbs($newCrumbs); } return $newCrumbs; }
private function createTargetFromFile(WebRequest $request, $file) { $nextRequest = $request->withContext($request->getTarget())->withTarget(new Path()); return new FileTarget($nextRequest, $this->store->read($file), $file); }
/** * @param Parameter $parameter * @return boolean */ public function has(Parameter $parameter) { return $this->request->getArguments()->has($parameter->getName()); }
public function givenTheContextIs($string) { $this->request->setContext(Url::fromString($string)); }
public function prepare(WebRequest $request) { $this->registerRenderers($request->getContext()); $this->registerFields(); $this->actions->restrictAccess($this->getAccessControl($request)); }
public function thenIsShouldHaveNoHeader($key) { $this->spec->assertFalse($this->request->getHeaders()->has($key)); }