3

我有一个包含所有路由/url及其路径的数组,

Example : $route = array(
'/' => 'files/index.php',
'pages' => 'files/pages.php',
'pages/add' => 'files/page-add.php',
'posts/*' => 'files/posts.php',
)

使用 array_key_exists() 我检查数组中是否存在路由,如果是,则加载其路径,如果找到直接匹配则它可以工作。

posts/*每当向 发出请求时,我都希望它与路径匹配posts/anything, posts/view/10,而我不能使用 array_key_exists() 来做到这一点。

你们对我应该使用哪种方法有任何想法/建议吗?

4

2 回答 2

4

结合使用两种策略:

  • 坚持使用您的“路由阵列”进行直接匹配,这是一种性能良好的安全解决方案。
  • 对于没有直接匹配的剩余请求,请尝试其他策略,例如基于正则表达式的模式匹配,通常使用 phpspreg_match()函数。这为您提供了描述模式的无限可能,尽管它显然比寻找直接匹配要慢。
于 2012-10-21T09:16:43.263 回答
0

您可以使用array_key_exists(),但它失败了,然后尝试*在密钥中检测到 a 的路线。

if (array_key_exists($url, $route)) {
   // Serve normally.
} else {

    $route = array_filter($route, function($route) { 
                     if (substr($route, -1) != "*") {
                        return FALSE;
                     }

                     return (substr($url, 0, strlen($route)) != substr($route, 0, -1));
               });

    if ($route) {
       // Serve normally.
       $route = end($route);

    } else {
       // Route wasn't matched.
    }

}
于 2012-10-21T09:19:36.543 回答