Мы уже рассматривали общие механизмы работы с JSON в PHP. Сегодня мы изучим приёмы работы с ним в приложениях на основе фреймворка Yii 2, которые несколько отличаются от описанных ранее.
В Yii 2 работу с JSON можно разделить на две неравные составляющие. Это отправка JSON по и его получение.
Отправка выполняется предельно просто. Для того, чтобы отправить объект модели или просто любой PHP объект достаточно в контроллере заменить стандартный рендеринг представления, на метод asJson, который сформирует ответ сервера соответствующим образом.
1 |
return $this->asJson($myObject); // Это вместо return $this->render |
Этот приём работает всегда в любом контроллере.
С получением JSON всё гораздо сложнее.
Дело в том, что «обычный» контроллер, который наследуется от класса yii\web\Controller, не может получить JSON из HTTP запроса с типом содержимого application/json. Кроме того, для обработки application/json необходимо дополнительно включить поддержку на уровне приложения.
Поддержка на уровне приложения подключается в конфигурационном файле web.php. В разделе request нужно добавить подраздел parsers с указанием компонента для разбора поступающих JSON данных.
1 2 3 4 5 6 |
'request' => [ 'cookieValidationKey' => ABCD', 'baseUrl' => '', 'parsers' => [ 'application/json' => 'yii\web\JsonParser' ] |
После этого можно изменить базовый класс контроллера на yii\rest\Controller и начать работу с JSON данными, получаемыми приложением.
1 2 3 4 5 6 |
public function actionTest(){ $request=Yii::$app->getRequest(); $myData=(object)$request->bodyParams['myData']; // Далее что-то делаем с полученными данными return $this->asJson($myResult); } |
Получить JSON можно при помощи стандартного метода bodyParams. Но, в случае Yii 2 исходные данные поступают как ассоциативный массив, а не строка. Потому вместо использования функции json_decode требуется приведение к object. После чего можно работать с JSON как с обычным PHP объектом.
Вышеуказанные приём позволяют не только наладить работу с JSON в web приложении, но и лежат в основе работы REST API, которые строятся на базе Yii 2. Собственно на это и сделан основной акцент в данной статье, так как REST API на Yii 2 на сегодняшний день достаточно популярны.
Вопрос работы с JSON в Yii 2 также актуален и для обычного AJAX. Но, об этом в отдельной статье.
Добавить комментарий