我正在尝试使用前端控制器和路由系统制作MVC框架。
路由系统通过定义这样的路径来工作......
$route->add('{controller}/{action}'); // default path
$route->add('admin/{controller}/{action}'); // admin path
为此,我首先从预定义路线构建正则表达式。
然后我使用URL查询字符串(例如home / index)并使用preg_match();
以下是示例代码...
$route = 'admin/{controller}/{action}';
$url = 'admin/controller/action';
echo $route . '<br>';
$route = preg_replace('/\//', '\\/', $route); // repaces '/' with '\/'
echo $route . '<br>';
$route = preg_replace('/{([a-z]+)}/', '(?P<\1>[a-z-]+)', $route); // for each path segment in curly {} gets replaced with a regular expression and named according to what is in the braces
echo $route . '<br>';
$route = '/^' . $route . '$/i'; // encapsulating the reg_exp
echo $route . '<br>';
preg_match($route, $url, $matches);
echo '<pre>', print_r($matches);
这将输出以下代码...您可以看到如何根据我定义的路径构建正则表达式... {controller} / {action}
现在,我根本不理解的部分是:
?P<\1>
这是如何工作的,以便输出数组键以{controller}和{action}命名?我无法找到有关此语法的任何信息,并且完全混淆了!