Encodera

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

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

Оглавление

Запросы и ответы

Запрос — то, что браузер прислал сайту: адрес, параметры, поля формы. Ответ — то, что сайт отправляет обратно. В контроллере запрос доступен как $this->request, ответ — как $this->response. Создавать их не нужно: оба объекта достаются от BaseController.

Параметры адреса

Параметры после знака вопроса читает метод getGet():

// app/Controllers/Posts.php
public function search(): string
{
    $query = $this->request->getGet('q');
 
    return 'Вы искали: ' . esc($query);
}

Добавьте маршрут $routes->get('search', 'Posts::search'); и откройте /search?q=php — страница покажет «Вы искали: php». Если параметра нет, getGet() вернёт null. Функция esc() делает текст безопасным для вывода; о ней — в уроке о шаблонах.

Поля формы

Данные, отправленные формой методом POST, читает getPost():

public function create(): string
{
    $title = $this->request->getPost('title');
 
    return 'Получен заголовок: ' . esc($title);
}

Без аргумента getPost() возвращает массив всех полей.

Другие методы запроса

МетодЧто возвращает
getGet('q')Параметр адреса
getPost('title')Поле формы
getJSON(true)Тело запроса JSON в виде массива
getMethod()Метод запроса: GET, POST
is('post')true, если запрос отправлен методом POST
getIPAddress()Адрес посетителя

Перенаправление

После сохранения формы посетителя отправляют на другую страницу:

public function create()
{
    // здесь данные сохраняются
 
    return redirect()->to('/posts');
}

Браузер сам откроет /posts. Есть и другие варианты:

return redirect()->route('posts.show', [5]); // по имени маршрута
return redirect()->back();                   // на предыдущую страницу

Ответ JSON

JSON — текстовый формат данных, который понимают программы на JavaScript и мобильные приложения:

public function status()
{
    return $this->response->setJSON(['status' => 'ok', 'posts' => 12]);
}

Браузер получит строку вида {"status":"ok","posts":12} и заголовок с типом application/json.

Код состояния

Код состояния сообщает, чем закончился запрос: 200 — успех, 404 — не найдено. Его задаёт setStatusCode():

return $this->response->setStatusCode(404)->setBody('Статья не найдена');

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

Вызов redirect()->to('/posts'); без слова return ничего не делает: функция только создаёт объект ответа, а отправляет его фреймворк, получив из метода. Метод продолжит работу, и посетитель останется на пустой странице. Перед redirect() всегда пишите return.

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

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