Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Данные запроса

Запрос — всё, что браузер прислал серверу: адрес, параметры после знака вопроса, поля формы, заголовки. В контроллере эти данные читают двумя способами: коротким помощником params() и через объект запроса getRequest(). Оба доступны в любом действии, создавать ничего не нужно.

Параметр из адреса

Параметры маршрута, описанные в настройках через двоеточие, читает fromRoute():

// module/Blog/src/Controller/PostController.php
public function viewAction()
{
    $id = (int) $this->params()->fromRoute('id');
 
    return new ViewModel(['id' => $id]);
}

По адресу /blog/5 в переменной $id окажется число 5. Значение из адреса всегда строка, поэтому его приводят к целому числу.

Строка запроса

Параметры после знака вопроса читает fromQuery(). Второй аргумент — значение, если параметра нет:

public function indexAction()
{
    $page = (int) $this->params()->fromQuery('page', 1);
    $search = (string) $this->params()->fromQuery('q', '');
 
    return new ViewModel(['page' => $page, 'search' => $search]);
}

Для адреса /blog?page=2&q=php получится $page, равный 2, и $search, равный php. Для адреса /blog — 1 и пустая строка.

Все методы params

МетодОткуда берёт значение
fromRoute('id')Параметр маршрута
fromQuery('page', 1)Строка запроса после ?
fromPost('title')Поле формы, отправленной методом POST
fromFiles('image')Загруженный файл
fromHeader('User-Agent')Заголовок запроса (объект заголовка)

Вызов без имени — например, fromQuery() — возвращает все значения массивом.

Объект запроса

Когда нужно узнать метод запроса или взять все данные формы сразу, используют getRequest():

public function addAction()
{
    $request = $this->getRequest();
 
    if ($request->isPost()) {
        $data = $request->getPost()->toArray();
 
        // $data['title'], $data['body']
    }
 
    return new ViewModel();
}

Действие add отвечает и на открытие страницы (GET), и на отправку формы (POST). isPost() позволяет различить эти случаи.

МетодЧто возвращает
isGet(), isPost()Совпадает ли метод запроса
getPost('title')Одно поле формы
getPost()->toArray()Все поля формы
getQuery('page', 1)Параметр строки запроса
isXmlHttpRequest()Запрос отправлен из JavaScript

Частая ошибка

Данные запроса нельзя считать правильными. Значение fromQuery('page') может оказаться текстом, отрицательным числом или отсутствовать. Приводите типы — (int), (string) — и задавайте значение по умолчанию, а данные форм проверяйте правилами, о которых рассказывает урок о проверке данных.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.