Я немного знаком с PHP MVC. Скажем, у меня есть контроллер так:Маршрутизация в RESTful API в PHP
class Customers{
public function method1(param1, param2, param3, ..., param_n){
}
}
В моей странице bootstraping, я могу захватить браузер 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);
ОБРАТИТЕ ВНИМАНИЕ: Над кодом для целей иллюстрации. Я всегда делаю проверки в реальных ситуациях. Эти проверки здесь не показаны, поэтому не используйте приведенные выше примеры для серьезных проектов.
Теперь я хочу реализовать RESTful API с использованием шаблона MVC. Что я уже знаю:
- В браузере не задействован, поэтому
$_GET['url']
не работает. - конечная точка получается из
$_SERVER['REQUEST_URI']
- Метод получается из
$_SERVER['REQUEST_METHOD']
Как мне маршрут к конечной точке, например, customers/{12345}/orders
, чтобы получить заказы конкретного клиента с идентификатором 12345
?
Как это сделать?
заменить идею использования переменных '$ _GET' с отправкой заголовков' $ _SERVER' http. Кроме того, чтобы быть понятным, вы все равно можете использовать '$ _GET' querystrings без участия браузера, так что это не ваш лимитирующий фактор. Вы все равно можете использовать '$ _POST'. Вы экспериментировали с использованием MVC Framework, например CodeIgniter или Zend, поскольку проблемы маршрутизации уже позаботились, или вы больше приклеены к идее вручную создать модель MVC самостоятельно? –
@ LionelRitchietheManatee 1. Я знал, что все еще могу использовать '$ _GET', то, что я не знал, было' $ _GET ['url'] '2. Да, я больше привязан к идее создания вручную модели MVC. На самом деле, именно поэтому я задаю этот вопрос. Я хочу узнать, как это сделать. –
Я полностью понимаю. Когда вы ссылаетесь на использование '$ _GET ['url']', вы ссылаетесь на именованный параметр запроса, такой как '? Url = www.something.com', или вы ссылаетесь на сам URL как' $ _SERVER [HTTP_HOST] 'и '$ _SERVER [REQUEST_URI]'? –