替换通配符以进行网址比较

时间:2015-10-13 09:33:37

标签: php regex validation url-rewriting url-routing

我需要检查路由文件中的有效路由,我想在其中放置一个动态的url部分的通配符(或占位符)。 路由器以json格式读取所有路由:

{"action" : "BlogController@showPost", "method" : "GET", "url" : "showPost/id/{}"}

我需要在比较发生时用当前值更改holder {any}并允许将regex表达式放在{any}标记内。

这样的网址: 必须将showPost / id / 211与showPost / id / {}进行比较,并返回true。如果可能,我希望允许{' [0-9] \'}作为可选参数,以确保实际值与正则表达式匹配。

这样做有什么最佳解决方案?

比较方法是:

    public static function findAction($query) {
       foreach (Router::getInstance()->routes as $route) {
         if ($route->url == $query) {
             return $route;
         }
     }
}

$ query包含/ showPost / id / 221和Router :: getInstance() - > routes-> route-> url包含showPost / id / {}

该帖子与此自动解决的问题有关: how to make nice rewrited urls from a router 我不会重新发布路由器代码以避免重复。

提前致谢

1 个答案:

答案 0 :(得分:0)

我找到了一个使用“?”的解决方案作为路径json文件的通配符。它可能不是最好的方式,但实际上是有效的。 该方法现在替换(并尝试检查)真实路径查询?并检查每个周期的路线。

public static function findAction($query) {
        //d($query);
        $queryArray = explode("/", $query);
        //d($queryArray);
           foreach (Router::getInstance()->routes as $route) {
             if ($route->url == $query) {
                 // replace current routes url with incoming url
                 $route->url = $query;
                 return $route;
             } else {
                 $queryReplace = null;
                 foreach ($queryArray as $key => $value) {
                     if (strpos($route->url,"?")) {
                         $queryReplace = str_replace("?", $value, $route->url);
                         if($queryReplace == $query) {
                             $route->url = $query;
                             return $route;
                         }
                     }
                 }

             }

我仍然想放{any或regex}但是atm我没有找到解决方案。