@qazwerhood

Почему пустой POST в YII2 после переустановки?

Разработали собственное api для мобильных приложений, которое работает на основе пост запросов, но после переустановки проекта на новый сервер Yii::$app->request->post() всегда возвращает пустое значение. При этом Yii::$app->request->getRawBody() содержит значение, но переписывать все api не хотелось бы.

Подскажите в чем может быть проблема и в какую сторону копать? Заранее благодарен.

Отправка через мобильное приложение или постом через RestClient PHPStorm'а. Возращает пустоту всегда.
public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'only' => ['logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::class,
                'actions' => [
                    'login' => ['post', 'get'],
                    'token' => ['post', 'get'],
                    'logout' => ['post', 'get'],
                ],
            ],
        ];
    }

public function beforeAction($action) {
        $this->enableCsrfValidation = false;
        return parent::beforeAction($action);
    }

 public function actionLogin()
    {
        return Yii::$app->request->post("username");
    }
  • Вопрос задан
  • 700 просмотров
Решения вопроса 1
@Wolfak
Попробуйте еще раз переустановить Yii2 в правильной последовательности, мне помогло.
https://www.yiiframework.com/doc/guide/2.0/ru/star...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
Web developer
Добавьте парсер JsonParser в компонент request.
При application/json запросах $_POST будет заполнятся данными из JSON автоматически.
'components' => [
    'request' => [
        'csrfParam' => '_csrf-api',
        'parsers' => [
            'application/json' => [
                'class' => \yii\web\JsonParser::class,
                'asArray' => true,
            ],
        ],
    ],
// ...


Т.е. если на вход поступит такой контент:
{
    "name": "Nick"
}

то $name = Yii::$app->request->post('name') будет работать.
Ответ написан
@Byte255
Пишу на PHP за еду
Скорее всего на старый сервер данные почему-то приходили как form/data, а на новом сервере стали приходить как application/json.
Почему это могло произойти, ума не приложу.
Я бы в качестве быстрого решения пропатчил Yii::$app->request->post() чтобы он возвращал данные, полученные из Yii::$app->request->getRawBody(), а потом дальше думал.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы