Пример #1
0
 /**
  * Perform routing.
  *
  * @param Curry_Request $request
  * @return Page|bool
  */
 public function route(Curry_Request $request)
 {
     $p = explode('?', $request->getUri(), 2);
     $parts = explode("/", $p[0]);
     $query = isset($p[1]) ? "?" . $p[1] : '';
     $url = "";
     while (count($parts)) {
         $model = self::findPageModel($url ? $url : '/');
         if ($model) {
             $slug = array_shift($parts);
             $remaining = join("/", $parts);
             $params = self::getParamFromSlug($model, $slug);
             if ($params) {
                 // add params to request
                 foreach ($params as $name => $value) {
                     $request->setParam('get', $name, $value);
                 }
                 $query .= (strlen($query) ? '&' : '?') . http_build_query($params);
                 // rebuild uri
                 $request->setUri($url . $remaining . $query);
                 // continue routing
                 return true;
             }
             // put slug back and continue searching
             array_unshift($parts, $slug);
         }
         $url .= array_shift($parts) . "/";
     }
     return null;
 }
Пример #2
0
 /**
  * Perform routing.
  *
  * @param Curry_Request $request
  * @return Page|bool
  */
 public function route(Curry_Request $request)
 {
     if (preg_match($this->regexp, $request->getUri(), $m)) {
         foreach ($m as $k => $v) {
             if (is_string($k)) {
                 $request->setParam('get', $k, $v);
             }
         }
         $request->setUri($this->target);
         return true;
     }
     return false;
 }
Пример #3
0
 /**
  * Perform routing.
  *
  * @param Curry_Request $request
  * @return Page|bool
  */
 public function route(Curry_Request $request)
 {
     $uri = $request->getUri();
     $qpos = strpos($uri, '?');
     if ($qpos !== false) {
         $uri = substr($uri, 0, $qpos);
     }
     if (substr($uri, 0, strlen($this->base)) == $this->base && strlen($uri) > strlen($this->base)) {
         $remaining = substr($uri, strlen($this->base));
         // remove trailing slash
         if (substr($remaining, -1) == '/') {
             $remaining = substr($remaining, 0, -1);
         }
         $request->setParam('get', $this->param, $remaining);
         $request->setUri($this->target);
         return true;
     }
     return false;
 }
Пример #4
0
 /**
  * Perform routing.
  *
  * @param Curry_Request $request
  * @return Page|bool
  */
 public function route(Curry_Request $request)
 {
     $uri = $request->getUri();
     if (substr($uri, 0, strlen($this->base)) == $this->base) {
         $remaining = substr($uri, strlen($this->base));
         $name = null;
         foreach (explode('/', $remaining) as $param) {
             if ($name) {
                 $request->setParam('get', $name, $param);
                 $name = null;
             } else {
                 $name = $param;
             }
         }
         $request->setUri($this->target);
         return true;
     }
     return false;
 }