示例#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)));
 }
示例#2
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);
     }
 }
示例#3
0
 private function parseExtension(Path $target)
 {
     $extension = null;
     $elements = $target->getElements();
     if (count($elements) && strpos($elements[count($elements) - 1], '.')) {
         $parts = explode('.', array_pop($elements));
         $extension = array_pop($parts);
         $elements[] = implode('.', $parts);
     }
     return array(new Path($elements), $extension);
 }