PHP中restfulapi中的路由

PHP中restfulapi中的路由,php,url-routing,restful-url,Php,Url Routing,Restful Url,我对PHP MVC有点熟悉。比如说,我有一个这样的控制器: class Customers{ public function method1( param1, param2, param3, ..., param_n ){ } } 在我的引导页面中,我可以获取如下浏览器URL: $url = explode('/', filter_var(rtrim( $_GET['url'], '/' ), FILTER_SANITIZE_URL)); 我做$controller=$u

我对PHP MVC有点熟悉。比如说,我有一个这样的控制器:

class Customers{

    public function method1( param1, param2, param3, ..., param_n ){

    }
}
在我的引导页面中,我可以获取如下浏览器URL:

$url = explode('/', filter_var(rtrim( $_GET['url'], '/' ), FILTER_SANITIZE_URL));
我做
$controller=$url[0]
$method=$url[1]
。第二个索引之后的
$url
中的任何其他元素都是参数,可以收集到数组变量中,例如
$params
。然后我选择相关的控制器方法和参数,如下所示:

call_user_func_array([$controller, $method], $params);
请注意:以上代码用于说明。我总是在现实生活中做检查。这里没有显示这些检查,因此不要将上述示例用于严重的项目

现在,我想使用MVC模式实现一个RESTful API。我已经知道:

  • 没有涉及浏览器,因此
    $\u GET['url']
    不在其中
  • 端点是从
    $\u服务器['REQUEST\u URI']
  • 该方法可从
    $\u服务器['REQUEST\u method']
  • 如何路由到端点,例如,
    customers/{12345}/orders
    ,以获取id为
    12345
    的特定客户的订单


    我怎样才能做到这一点呢?

    实现您想要的最快方法就是使用
    但这其中的乐趣何在:)

    也就是说,我是一个学生,但对你的前提感到困惑。它是一个RESTAPI,会被其他一些代码(比如手机或第三方web应用程序)使用,还是一个合适的网站,在那里你只想获得漂亮的URL

    因为如果是前一种情况,那么进行奇特的URL解析是完全没有意义的。你应该阅读,而不是乱弄URL真正的RESTAPI不需要花哨的URL解析。

    我会假设你实际制作的是一个合适的网站,但是有漂亮的URL

    首先,您必须实现一个路由机制,它获取一个regexp模式列表,并将它们与您提供的URL(您可以从
    $\u GET['URL']
    $\u服务器[REQUEST\u URI]
    (实际上,您的代码并不关心从哪里收集URL……您不应该访问函数/类中的超全局函数)

    一个简单的版本在中进行了解释。我懒得全部重写它=p

    第二部分(也是高度可选的)是创建代码,它将采用人类可读的路由表示法(例如:
    /users/{id |[0-9]+}
    ),并将其转换为正则表达式,可由路由机制使用

    如果您决定使用人类可读的符号,那么有两个主要方向:

    • 内联符号(参见上面的示例或FastRoute)
    • 带有符号的配置文件(可能是JSON或YAML)
    至于“最终结果会是什么样子”,你可以看看代码示例。这将说明路由器公共接口的一个可用选项

    TL;DR


    你的问题很模糊,很难理解到底什么对你有帮助。

    用发送
    $\u-GET
    服务器http头取代使用
    $\u-GET
    变量的想法。另外,要明确的是,你仍然可以在不涉及浏览器的情况下使用
    $\u-GET
    查询字符串,因此这不是你的限制因素。你可以直到使用
    $\u POST
    为止。你有没有尝试过使用像CodeIgniter或Zend这样的MVC框架,因为路由问题已经解决了,还是你更执着于自己手动创建MVC模型的想法?@LionelRitchietheManatee 1。我知道我仍然可以使用
    $\u GET
    ,我不知道的是
    $\u GET['url']
    2.是的,我更执着于自己手动创建MVC模型的想法。事实上,这正是我问这个问题的原因。我想学习如何做。我完全理解。当你提到使用
    $\u GET['url']
    您是指一个命名的查询参数,如
    ?url=www.something.com
    ,还是指url本身,如
    $\u SERVER[HTTP\u HOST]
    $\u SERVER[REQUEST\u URI]
    ?@LionelRitchietheManatee,我指的是后者。如果我的问题听起来不清楚,我很抱歉。我认为“现在我想使用MBC模式实现一个RESTful API”之前的所有内容都暗示我在谈论普通网站,而从那里开始的所有内容都在谈论类似MVC的结构中的API。