HTTP-запрос и HTTP-ответ играют важную роль в любом веб-приложении. Нам нужно получить полную информацию о запросе http, чтобы правильно его обработать. После обработки нам нужно отправить обработанные данные клиенту через HTTP-ответ.
FuelPHP предоставляет превосходный класс Request и Response для чтения и записи HTTP-запроса и HTTP-ответа соответственно. Давайте узнаем о классах Request и Response в этой главе.
Запрос
В типичном веб-приложении приложению необходимо проанализировать детали текущего запроса. Класс запроса предоставляет простые методы для анализа текущего запроса, обрабатываемого приложением. Запрос также предоставляет возможность создать новый запрос, выступая в качестве http-клиента.
Создание нового запроса позволяет приложению запрашивать другую часть приложения или совсем другое приложение и отображать результат. Давайте узнаем, как разобрать входящий запрос в этой главе, и научимся создавать новый запрос в главе «Запрос HMVC».
Разбор запроса
Класс запроса предоставляет три метода для получения подробностей http-запроса. Они заключаются в следующем,
active — это статический метод, который возвращает текущий активный http-запрос.
$currentRequest = Request::active();
param — возвращает значение указанного параметра. Он содержит два аргумента. Первый аргумент — это имя параметра, а второй аргумент — это значение, которое нужно вернуть, если параметр не доступен в текущем HTTP-запросе.
$param = Request::active()->param('employee_name', 'none');
params — Это то же самое, что и param, за исключением того, что он возвращает все параметры в виде массива.
$params = Request::active()->params();
пример
Давайте создадим простую форму и обработаем форму, используя класс запроса.
Шаг 1 — Создайте новое действие action_request в контроллере сотрудника.
public function action_request() { }
Шаг 2 — Вызовите методы запроса, чтобы получить все параметры текущего запроса.
public function action_request() { $params = Request::active()->params(); }
Шаг 3 — Дамп извлеченный массив параметров.
public function action_request() { $params = Request::active()->params(); echo dump($params); }
Шаг 4 — Измените маршрут, включив параметры в файл конфигурации маршрута, fuel / app / config / rout.php.
'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),
Теперь, запрашивая новое действие, http: // localhost: 8080 / employee / request / Jon, он покажет следующий ответ.
отклик
Класс ответа предоставляет опции для создания ответа http. По умолчанию нам не нужно использовать класс ответа напрямую в большинстве ситуаций. Вместо этого мы используем View (который мы изучим в следующей главе), чтобы создать http-ответ. View скрывает ответ http от разработчика и отправляет ответ клиенту, используя базовый класс Response . В сложной ситуации мы напрямую используем класс Response и создаем полный http-ответ.
Создание ответа
Ответ состоит из заголовков и тела. Основной заголовок — код статуса http. Http-код состояния — это стандартные коды, определенные в протоколе HTTP для описания ответа. Например, код состояния 200 означает, что запрос выполнен успешно.
Класс Response предоставляет три аргумента для создания ответа http,
-
$ body — тело ответа http
-
$ status_code — код статуса ответа http
-
$ headers — необязательные заголовки в виде массива
$ body — тело ответа http
$ status_code — код статуса ответа http
$ headers — необязательные заголовки в виде массива
$body = "Hi, FuelPHP"; $headers = array ( 'Content-Type' => 'text/html', ); $response = new Response($body, 200, $headers);
Давайте создадим новое действие action_response в контроллере сотрудников следующим образом.
public function action_response() { $body = "Hi, FuelPHP"; $headers = array ('Content-Type' => 'text/html',); $response = new Response($body, 200, $headers); return $response; }
Результат
методы
Класс Response предоставляет множество методов для манипулирования HTTP-ответами. Они заключаются в следующем,
forge — это то же самое, что конструктор класса ответа, как показано выше.
return Response::forge("Hi, FuelPHP", 404);
redirect — предоставляет возможность перенаправления на URL вместо отправки ответа. Он содержит следующие аргументы,
a.url — целевой URL b. Метод — методы перенаправления. местоположение (по умолчанию) и обновление c . redirect_code — код статуса http. Значение по умолчанию 302.
// use a URL Response::redirect('http://some-domain/index', 'refresh'); // or use a relative URI Response::redirect('employee/list');
redirect_back — это похоже на метод перенаправления, за исключением того, что перенаправляет на предыдущую страницу. Мы можем указать страницу перенаправления, если обратная страница недоступна.
// If there is no back page, go to the employee list page Response::redirect_back('/employee/list', 'refresh');
set_status — предоставляет возможность установить код статуса http.
$response = new Response(); $response->set_status(404);
set_header — предоставляет возможность установить заголовки http.
$response = new Response(); $response->set_header('Content-Type', 'application/pdf'); // replace previous value using third arguments $response->set_header('Content-Type', 'application/pdf', 'text/plain');
set_headers — это то же самое, что и set_header, за исключением того, что он предоставляет возможность установить несколько заголовков, используя массив.
$response = new Response(); $response->set_headers (array 'Content-Type' => 'application/pdf', 'Pragma' => 'no-cache', ));
get_header — позволяет получить предыдущие данные заголовка набора.
$response = new Response(); $response->set_header('Pragma', 'no-cache'); // returns 'no-cache' $header = $response->get_header('Pragma'); // returns array('Pragma' => 'no-cache') $header = $response->get_header();
body — предоставляет возможность установить тело ответа http.
$response = new Response(); $response->body('Hi, FuelPHP'); // returns 'Hi, FuelPHP' $body = $response->body();
send_headers — отправляет заголовки запрашиваемому клиенту. FuelPHP использует этот метод для отправки ответа клиенту. Обычно нам не нужно использовать этот метод.
$response->send_headers();
send — То же, что send_headers, за исключением того, что заголовки могут быть ограничены в ответе http.