PHP中restfulapi中的路由
我对PHP MVC有点熟悉。比如说,我有一个这样的控制器: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
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)
你的问题很模糊,很难理解到底什么对你有帮助。用发送
$\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。