Url 路由占位符匹配正则表达式

Url Routing Placeholder Matching Regex

我正在构建自己的学习框架,目前进展顺利,除了一件事,即路由。

假设 url 是 localhost/admin/view,我将该路由与正确的控制器和操作匹配没有问题。当 url 具有如下所示的 ID 时会出现此问题:localhost/admin/view/12。我正在尝试在我的路由数组(框架方法)中使用占位符,其中包含与 url 匹配的已定义路由。

路由数组如下所示:

public function getRoute() {
    $this->route = array(
        [
            'url' => "admin/view",
            'controller' => 'AdminController',
            'action' => 'viewPosts',
            'type' => 'GET'
        ],
        [
            'url' => "admin/view/{id}",
            'controller' => 'AdminController',
            'action' => 'viewPostById',
            'type' => 'GET'
        ],
        [
            'url' => "admin/store/posts",
            'controller' => 'AdminController',
            'action' => 'storePosts',
            'type' => 'POST'
        ],
    );
}

我不知道如何将 url 与具有占位符的路由数组中的值相匹配。就像 url 是 localhost/admin/view/1 我如何将它与数组中的值 admin/view/{id} 匹配?然后如何从 url 轻松获取 GET 参数?我知道获取参数不应该太难,但我试图在不破坏 url 和做太多操作的情况下获取它们(也许使用正则表达式?)。

你应该在路由匹配中使用其他方法。我建议您看看其他框架是如何处理它的(搜索并查看 .htaccess 是如何工作的)。 所以你应该使用正则表达式来处理匹配,在 admin/view/{id} 的情况下,你可以考虑这样的事情: admin/view/.* 对于这种情况,admin/view/ 之后的所有内容都是您的 ID。

您还可以阅读其他框架的文档,例如 cakephp:https://book.cakephp.org/3.0/en/development/routing.html

在php中我们有获取查询字符串的函数:$_SERVER['QUERY_STRING'] (http://se2.php.net/reserved.variables.server.php)

此致。