Beispiel #1
0
 /**
  * @param \watoki\deli\Request $request
  * @return \watoki\deli\Request|null
  */
 public function matches(Request $request)
 {
     if (!$this->path->getElements()) {
         return $request;
     }
     $target = $request->getTarget()->getElements();
     $elements = $this->path->getElements();
     for ($i = 0; $i < count($elements); $i++) {
         $p = $elements[$i];
         if ($i >= count($target)) {
             return null;
         } else {
             if (substr($p, 0, 1) == '{' && substr($p, -1) == '}') {
                 $key = substr($p, 1, -1);
                 $value = $target[$i];
                 $request = $request->withArgument($key, $value);
             } else {
                 if ($target[$i] != $p) {
                     return null;
                 }
             }
         }
     }
     return $request->withContext($request->getContext()->appendedAll(array_slice($target, 0, $i - 1)))->withTarget(new Path(array_slice($target, $i - 1)));
 }
Beispiel #2
0
 public function route(Request $request)
 {
     if ($this->default && $request->getTarget()->isEmpty()) {
         return $this->default->create($request);
     }
     try {
         return parent::route($request);
     } catch (TargetNotFoundException $e) {
         if ($request instanceof WebRequest && ($found = $this->findFile($request))) {
             return $this->createTargetFromFile($request, $found);
         }
         throw $e;
     }
 }
Beispiel #3
0
 /**
  * @param Path|Url $context
  * @return static
  */
 public function withContext(Path $context)
 {
     if (!$context instanceof Url) {
         $context = $this->getContext()->with($context);
     }
     return parent::withContext($context);
 }
Beispiel #4
0
 private function createTargetFromClass($fullClassName, Request $request, Path $context)
 {
     $object = $this->factory->getInstance($fullClassName);
     $nextRequest = $request->withContext($request->getContext()->appendedAll($context->getElements()));
     $nextRequest = $nextRequest->withTarget(new Path(array_slice($request->getTarget()->getElements(), count($context->getElements()))));
     if ($object instanceof Responding) {
         return new RespondingTarget($nextRequest, $object);
     } else {
         return new ObjectTarget($nextRequest, $object, $this->factory);
     }
 }
Beispiel #5
0
 protected function isContainerTarget(Request $request)
 {
     return in_array($request->getTarget()->getElements(), [[], [''], ['index']]);
 }
Beispiel #6
0
 private function thenTheRoutedRequestShouldHaveTheContext($string)
 {
     $this->assertEquals($string, $this->response->getContext()->toString());
 }
Beispiel #7
0
 public function givenTheRequestHasTheArgument_WithTheValue($key, $value)
 {
     $this->request = $this->request->withArgument($key, $value);
 }