Encodera

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

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

Оглавление

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

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

Чтение параметров

Добавьте в controllers/PostController.php действие поиска:

// controllers/PostController.php
use Yii;
 
public function actionSearch(): string
{
    $q = Yii::$app->request->get('q', '');
 
    return "Вы искали: $q";
}

Адрес /post/search?q=yii покажет «Вы искали: yii». Второй аргумент get() — значение по умолчанию на случай, когда параметра нет.

Методы запроса

ВызовЧто возвращает
$request->get('q')Параметр адреса
$request->post('title')Поле отправленной формы
$request->post()Все поля формы массивом
$request->isPosttrue, если метод запроса POST
$request->isAjaxtrue, если запрос отправлен скриптом
$request->userIPАдрес посетителя
$request->headers->get('User-Agent')Заголовок запроса

Здесь $request — это Yii::$app->request.

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

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

public function actionRandom()
{
    return $this->redirect(['post/view', 'id' => 5]);
}

Адрес задаётся так же, как в Url::to(): маршрут и параметры. Браузер, открыв /post/random, окажется на /posts/5. Есть и короткие варианты: $this->goHome() ведёт на главную, $this->refresh() заново открывает текущую страницу.

Ответ в формате JSON

JSON — текстовый формат обмена данными между программами. Метод asJson() превращает массив в такой ответ:

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

Страница /post/status выведет {"status":"ok","posts":12} и отправит заголовок Content-Type: application/json.

Ошибка 404

Чтобы ответить «страница не найдена», бросают исключение:

use yii\web\NotFoundHttpException;
 
public function actionView(int $id): string
{
    if ($id > 100) {
        throw new NotFoundHttpException('Статья не найдена.');
    }
 
    return "Статья номер $id";
}

Адрес /posts/500 покажет стандартную страницу ошибки с кодом 404 и вашим текстом. Для других кодов есть похожие классы: ForbiddenHttpException (403), BadRequestHttpException (400).

Отправка файла

public function actionDownload()
{
    return Yii::$app->response->sendFile(Yii::getAlias('@app/files/price.pdf'));
}

Браузер предложит сохранить файл. Запись @app — псевдоним пути, он означает папку проекта.

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

redirect() не останавливает действие сам — он лишь возвращает объект ответа. Без return код продолжит выполняться, и перенаправления не будет. Всегда пишите return $this->redirect(...).

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

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