【发布时间】:2015-12-28 13:11:55
【问题描述】:
我对 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。我已经知道的:
- 不涉及浏览器,因此
$_GET['url']不在其中。 - 端点从
$_SERVER['REQUEST_URI']获取 - 方法从
$_SERVER['REQUEST_METHOD']获取
我如何路由到端点,例如customers/{12345}/orders 以获取 ID 为 12345 的特定客户的订单?
我该怎么做?
【问题讨论】:
-
将使用
$_GET变量的想法替换为发送$_SERVERhttp 标头。此外,需要明确的是,您仍然可以在不涉及浏览器的情况下使用$_GET查询字符串,因此这不是您的限制因素。您仍然可以使用$_POST。您是否尝试过为此使用诸如 CodeIgniter 或 Zend 之类的 MVC 框架,因为路由问题已经得到解决,或者您更倾向于自己手动创建 MVC 模型的想法? -
@LionelRitchietheManatee 1. 我知道我仍然可以使用
$_GET,我不知道的是$_GET['url']2. 是的,我更倾向于自己手动创建 MVC 模型的想法。事实上,这正是我问这个问题的原因。我想学习怎么做。 -
我完全理解。当您提到使用
$_GET['url']时,您是指像?url=www.something.com这样的命名查询参数,还是像$_SERVER[HTTP_HOST]和$_SERVER[REQUEST_URI]这样引用 URL 本身? -
@LionelRitchietheManatee,我指的是后者。
标签: php url-routing restful-url