我需要检查路由文件中的有效路由,我想在其中放置一个动态的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 我不会重新发布路由器代码以避免重复。
提前致谢
答案 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我没有找到解决方案。