我有这样的路线(YAML):
hello_route:
path: /hello
controller: HelloController
action: helloAction
这工作正常并调用正确的控制器和操作,但我很难匹配通配符。例如,如果我想添加:
hello_route:
path: /hello/{name}
controller: HelloController
action: helloAction
我尝试使用正则表达式,但是当你在浏览器中输入/hello/bob
时,无论我用正则表达式做什么,它一直说没有路由。如何使用regex将URI /hello/bob
仍匹配/hello/{name}
?截至目前,它确实在寻找明显/{name}
!= /bob
到目前为止,我正在使用此功能,因为我认为将{name}
替换为*
会使浏览器将其视为外卡。但这不起作用。
/**
* Compiles routes
*
* @param array $routes
* @return string
*/
public function compileRoutes(array $routes)
{
foreach($routes as $key => $val)
{
if($val['path'])
{
preg_match_all('/\{(\w+?)}/', $val['path'], $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
foreach ($matches as $match)
{
if(isset($matches[0]) && isset($matches[1]))
{
$matches[0] = '*';
$val['path'] = $matches[0];
$this->params[] = $matches[1];
}
}
}
}
$this->routes = $routes;
}
这是@Tuga的回报
/
/test
/hello/{name} <- not being replaced
答案 0 :(得分:0)
我不知道你想要什么,但这个正则表达式的语法是错误的
\{(\w+?)}
它必须是这样的:
\{(\w+?)\}
或者这个:
(\w+?)