コード例 #1
0
ファイル: Redirecter.php プロジェクト: watoki/curir
 /**
  * @param WebRequest $request
  * @return Url
  */
 private function getAbsoluteTarget(WebRequest $request)
 {
     $target = $this->getTarget();
     if ($target->isAbsolute()) {
         return $target;
     }
     return Url::fromString($request->getContext() . '/' . $target);
 }
コード例 #2
0
ファイル: MultiResponder.php プロジェクト: watoki/curir
 /**
  * @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);
 }
コード例 #3
0
ファイル: FormatResponder.php プロジェクト: watoki/curir
 /**
  * @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(', ') . "]");
 }
コード例 #4
0
ファイル: FileTarget.php プロジェクト: watoki/curir
 /**
  * @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;
 }
コード例 #5
0
ファイル: WebFixture.php プロジェクト: jonfm/domin
 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();
 }
コード例 #6
0
ファイル: ErrorResponse.php プロジェクト: watoki/curir
 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();
     }
 }
コード例 #7
0
ファイル: Box.php プロジェクト: watoki/boxes
 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;
 }
コード例 #8
0
ファイル: ActionMenuItem.php プロジェクト: jonfm/domin
 private function getTarget(WebRequest $request)
 {
     return (string) $request->getContext()->appended($this->actionId)->withParameters(new Map($this->parameters));
 }
コード例 #9
0
ファイル: BoxContainer.php プロジェクト: watoki/boxes
 private function isMapping(WebRequest $request)
 {
     return $this->boxes->isMapping() && !$request->getHeaders()->has(self::HEADER_NO_BOXING) && $request->getFormats()->contains('html');
 }
コード例 #10
0
ファイル: BoxCollection.php プロジェクト: watoki/boxes
 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);
 }
コード例 #11
0
ファイル: ExecuteResource.php プロジェクト: jonfm/domin
 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;
 }
コード例 #12
0
ファイル: WebRouter.php プロジェクト: watoki/curir
 private function createTargetFromFile(WebRequest $request, $file)
 {
     $nextRequest = $request->withContext($request->getTarget())->withTarget(new Path());
     return new FileTarget($nextRequest, $this->store->read($file), $file);
 }
コード例 #13
0
ファイル: CurirParameterReader.php プロジェクト: rtens/domin
 /**
  * @param Parameter $parameter
  * @return boolean
  */
 public function has(Parameter $parameter)
 {
     return $this->request->getArguments()->has($parameter->getName());
 }
コード例 #14
0
ファイル: BoxFixture.php プロジェクト: watoki/boxes
 public function givenTheContextIs($string)
 {
     $this->request->setContext(Url::fromString($string));
 }
コード例 #15
0
ファイル: WebApplication.php プロジェクト: jonfm/domin
 public function prepare(WebRequest $request)
 {
     $this->registerRenderers($request->getContext());
     $this->registerFields();
     $this->actions->restrictAccess($this->getAccessControl($request));
 }
コード例 #16
0
 public function thenIsShouldHaveNoHeader($key)
 {
     $this->spec->assertFalse($this->request->getHeaders()->has($key));
 }