Установить значения в $ _POST в Yii2 по запросу? - PullRequest
0 голосов
/ 18 декабря 2018

Я пишу перехватчик для проверки запроса и декодирования данных, полученных из POST.После декодирования данных я должен установить данные на $_POST, чтобы все мои предыдущие функции записи работали как есть.

Я установил значения, как показано ниже

$_POST['amount'] = $data['a'];
$_POST['currency'] = $data['c'];

Я могуполучить эти переменные, используя $_POST, но эти значения не доступны в Yii::$app->request->post()

Поэтому мой вопрос заключается в том, могу ли я получить эти значения по Yii::$app->request->post()

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я думаю, вам следует немного подумать о рефакторинге своего кода, особенно если вы не единственный человек, работающий над проектом, потому что искусственное добавление значений в $_POST просто сбивает с толку и его следует избегать, если это возможно.Если я вижу код, который читает переменную из $_POST, я ищу, что он установлен на внешнем интерфейсе, а не где-то в контроллере.

Вы можете заставить свой перехватчик делать:

$post = Yii::$app->request->post();
// or $post = _ $POST;
$post['foo'] = 'bar';
someNamespace::$writeData = $post;

Затем, когда вы хотите получить доступ к данным (при условии, что они не всегда проходят через перехватчик и должны инициализироваться, когда они пусты):

if (empty(someNamespace::$writeData)) {
    someNamespace::$writeData = $_POST;
}
$data = someNamespace::$writeData;

и читать все из этой статической переменной вместо $_POST.Это более аккуратный и гораздо более удобный код, ИМХО.

0 голосов
/ 18 декабря 2018

Почтовые данные кэшируются внутри компонента Request, поэтому любые изменения в $_POST не будут отражены в Yii::$app->request->post().Однако вы можете использовать setBodyParams() для сброса этого кэша:

Yii::$app->request->setBodyParams(null);

$post = Yii::$app->request->post();

Или просто использовать setBodyParams(), чтобы установить ваши данные напрямую, не касаясь $_POST:

Yii::$app->request->setBodyParams(['amount' => $data['a'], 'currency' => $data['c']]);
...