Je me demande si ce n'est pas la fonction preg_match en elle-même qui pose problème.
Dans le cas déjà évoqué donc, la compilation de Slim échoue car la fonction preg_match renvoie null.
Or en suivant le tuto sur la création d'un router personnel, j'éprouve aussi quelque difficultés avec cette fonction.
Dans slim la Class Route défini une méthode match comme suit:
public function matches($resourceUri)
{
//Convert URL params into regex patterns, construct a regex for this route, init params
$patternAsRegex = preg_replace_callback(
'#:([\w]+)\+?#',
array($this, 'matchesCallback'),
str_replace(')', ')?', (string)$this->pattern)
);
if (substr($this->pattern, -1) === '/') {
$patternAsRegex .= '?';
}
$regex = '#^' . $patternAsRegex . '$#';
if ($this->caseSensitive === false) {
$regex .= 'i';
}
//Cache URL params' names and values if this route matches the current HTTP request
if (!preg_match($regex, $resourceUri, $paramValues)) {
return false;
}
foreach ($this->paramNames as $name) {
if (isset($paramValues[$name])) {
if (isset($this->paramNamesPath[$name])) {
$this->params[$name] = explode('/', urldecode($paramValues[$name]));
} else {
$this->params[$name] = urldecode($paramValues[$name]);
}
}
}
return true;
}
Dans le router (personnel) nous définissons également une fonction match
public function match($url){
$url = trim($url, '/');
$path = preg_replace('#:([\w]+)#', '[^/]+', $this->path);
$regex = "#^$path$#i";
if(!preg_match($regex, $url, $matches)){
return false;
}
var_dump($matches);
}
Le var_dump est censé me renvoyer un tableau or il ne me renvoit rien, même pas un null. Rien.
Je ne comprend plus trop.