Esempio n. 1
0
 /**
  * match(): defined by RouteInterface interface.
  *
  * @see    Route::match()
  * @param  Request  $request
  * @param  int|null $pathOffset
  * @return RouteMatch|null
  */
 public function match(Request $request, $pathOffset = null)
 {
     if ($pathOffset === null) {
         $pathOffset = 0;
     }
     $match = $this->route->match($request, $pathOffset);
     if ($match !== null && method_exists($request, 'getUri')) {
         if ($this->childRoutes !== null) {
             $this->addRoutes($this->childRoutes);
             $this->childRoutes = null;
         }
         $nextOffset = $pathOffset + $match->getLength();
         $uri = $request->getUri();
         $pathLength = strlen($uri->getPath());
         if ($this->mayTerminate && $nextOffset === $pathLength) {
             return $match;
         }
         foreach ($this->routes as $name => $route) {
             if (($subMatch = $route->match($request, $nextOffset)) instanceof RouteMatch) {
                 if ($match->getLength() + $subMatch->getLength() + $pathOffset === $pathLength) {
                     return $match->merge($subMatch)->setMatchedRouteName($name);
                 }
             }
         }
     }
     return null;
 }
Esempio n. 2
0
 /**
  * match(): defined by RouteInterface interface.
  *
  * @see    \Zend\Mvc\Router\RouteInterface::match()
  * @param  Request      $request
  * @param  integer|null $pathOffset
  * @param  array        $options
  * @return RouteMatch|null
  */
 public function match(Request $request, $pathOffset = null, array $options = [])
 {
     if ($pathOffset === null) {
         $pathOffset = 0;
     }
     $match = $this->route->match($request, $pathOffset, $options);
     if ($match !== null && method_exists($request, 'getUri')) {
         if ($this->childRoutes !== null) {
             $this->addRoutes($this->childRoutes);
             $this->childRoutes = null;
         }
         $nextOffset = $pathOffset + $match->getLength();
         $uri = $request->getUri();
         $pathLength = strlen($uri->getPath());
         if ($this->mayTerminate && $nextOffset === $pathLength) {
             $query = $uri->getQuery();
             if ('' == trim($query) || !$this->hasQueryChild()) {
                 return $match;
             }
         }
         if (isset($options['translator']) && !isset($options['locale']) && null !== ($locale = $match->getParam('locale', null))) {
             $options['locale'] = $locale;
         }
         foreach ($this->routes as $name => $route) {
             if (($subMatch = $route->match($request, $nextOffset, $options)) instanceof RouteMatch) {
                 if ($match->getLength() + $subMatch->getLength() + $pathOffset === $pathLength) {
                     return $match->merge($subMatch)->setMatchedRouteName($name);
                 }
             }
         }
     }
     return;
 }