When sending data, an empty value comes in Yii2, why is that? Data post: id, name.
JS
JavaScript
x
let is = document.querySelector("meta[name='csrf-token']").content,
ss = document.querySelector("meta[name='csrf-param']").content;
fetch("http://site.se/react/save-babysitter", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"csrf-param": ss,
"X-CSRF-Token": is
},
body: JSON.stringify({
'id': e.id,
'name': this.state.ChangeName
})
}).then(response => response.json())
.then((data) => console.log(data));
PHP
JavaScript
public function actionSaveBabysitter() {
$request = Yii::$app->request;
$post = $request->post('name');
echo json_decode($post);
}
Code 200, post null
Advertisement
Answer
By default the Yii reads post params from $_POST
global variable. But web server only parses request of body send as application/x-www-form-urlencoded
or multipart/form-data
. If you send data with Content-Type: application/json
they are not parsed into $_POST
variable.
To force Yii parsing JSON request you have to add json parser into yiiwebRequest::$parsers
property.
You can do that for example in your web.php
config file:
JavaScript
'components' => [
'request' => [
'parsers' => [
'application/json' => 'yiiwebJsonParser',
],
// ... other configurations for request component
],
// ... other components
]