Skip to content
Advertisement

Router Class not returning an array seems some regex issue

Public fundtion in router class:

public function match($url){

  // Match to the fixed URL format /controller/action
  $reg_exp = "/^(?P<controller>[a-z-]+)/(?P<action>[a-z-]+)$/";
  if (preg_match($reg_exp, $url, $matches)) {
    // Get named capture group values
    $params = [];
    foreach ($matches as $key => $match) {
        if (is_string($key)) {
            $params[$key] = $match;
        }
      }
    $this->params = $params;
    return true;
    }
  return false;
  }

  public function getParams(){
    return $this->params;    
  }

when this is called in index.php:

// Match the requested route
$url = $_SERVER['REQUEST_URI'];
echo "Requested URI: ". $url ."<br />";

if ($router->match($url)) {
    echo '<pre>';
    var_dump($router->getParams());
    echo '</pre>';
} else {
    echo "No route found for URL '$url'";
}

It doesn’t return an associative array. Ideally, I was anticipating this behavior →Local host analogue

Live server

On live server it doesn’t works.

seems like this is not getting true:

$router->match($url)

Advertisement

Answer

The url is /mvc/public/ which is begin and end with a slash, so the regex doesn’t match.

Fixed with:

"/^/(?P<controller>[a-z-]+)/(?P<action>[a-z-]+)/$/"
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement