@Natini

Почему Yii2 REAST api принимает json тестируя через postman, но видит лишь пустой массив когда отправляю REST api c json с php-файла?

Когда тестирую через postman свое api, все работает, данные добавляются в таблицу. Но когда пытаюсь провести тестирование с php файла, появляется ошибка {"status":false,"date":{"email":["Email cannot be blank."],"pass":["Pass cannot be blank."]}}, т.е. поля передаются пустыми/не передаются вообще.
Перед отправкой убеждаюсь, что json сформирован корректно, но return \Yii::$app->request->post(); возвращает [] - пустой массив?
Не могу понять, что же я делаю не так при отправке данных email и pass. Может кто с этим уже сталкивался и нашел решение?
Код файла php, с которого отправляю данные
<?php
    $fields['email'] = 'Aria';
    $fields['pass'] = '000';
    
    $json_str = json_encode($fields,JSON_UNESCAPED_UNICODE);
    		
    echo $json_str."\n";                                                        //{"email":"Aria","pass":"000"}
    $url = 'http://192.168.88.242:8080/api/users/create-users';
    $response = file_get_contents($url, false, stream_context_create(array(
       'http' => array(
          'method'  => 'POST',
          'header'  => 'Content-type: Application/JSON',     
          'content' => $json_str
      )
    )));
    
    Echo $response."\n";                        
    
    
  $response = json_decode($response, true);
  .......
  die('END');
?>

Код моего actionCreateUsers
public function actionCreateUsers()
    {
        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $users = new Users();
        $users->scenario=Users::SCENARIO_CREATE;
        $users->attributes= \Yii::$app->request->post(); 
        return \Yii::$app->request->post();           //Чтобы увидеть что получает в качестве данных, через postman это json, а от php - файла [] =(
        if($users->validate()){
            $users->save();
            return array('status' => true,'date'=>'User created successfuly');             //выдает в тестах через postman
        } else {
            return array('status'=> false,'date'=> $users->getErrors());               //выдает в тестах через php-файл
        }        
    }
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 2
@k2lhu
Попробуйте $content = Yii::$app->request->rawBody;
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Content-Type: application/json
вместо
Content-type: Application/JSON

В остальном по коду который отправляет json проблем нет. Он отправляет то что вы и ожидаете.
Вопрос в контроллере который принимает запрос и валидирует входящие данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы