Example #1
0
 private static function find_route($request_segments, $arguments = [])
 {
     foreach (array_reverse(self::$routes) as $rt => $ctrl) {
         $args = $arguments;
         $route_segments = explode('/', $rt);
         $count = 0;
         // concurrently loop through route and uri segments
         if (count($request_segments) === count($route_segments)) {
             foreach ($route_segments as $rt_seg) {
                 $length = count($route_segments);
                 if (isset($request_segments[$count]) && ($rt_seg === $request_segments[$count] || isset($rt_seg[0]) && $rt_seg[0] === ':')) {
                     // assign templated key=>value pairs
                     if (isset($rt_seg[0]) && $rt_seg[0] === ':') {
                         $key = substr($rt_seg, 1);
                         $value = $request_segments[$count];
                         $args[$key] = $value;
                     }
                     $count += 1;
                     // resolve with template and key=>values if template successfully processes uri
                     if ($count === $length) {
                         $parts = explode('#', $ctrl);
                         array_shift($route_segments);
                         $route_id = implode('/', $route_segments);
                         Router::$current_route_template = $route_id;
                         return ['ctrl' => $parts[0] . 'Ctrl', 'method' => $parts[1], 'args' => $args, 'route_template' => $route_id];
                     }
                     // exit route if template match failed
                 } else {
                     break;
                 }
             }
         }
     }
     return FALSE;
 }