我在使用
$this->input->post('policy')
时遇到了一些问题。有时(不规则次数的尝试中有 1 次)它为 null,这会导致进一步的代码出错,如果我用 php://input
检查它,我可以看到有效的 json。public function createPolicy()
{
$rawPostData = file_get_contents('php://input');
$inputPost = $this->input->post('policy');
$this->applicationLogger->debug('DEBUG', 'Raw POST data: ', $rawPostData);
// it log valid json
$this->applicationLogger->debug('DEBUG', 'POST policy: ',json_encode($inputPost));
// it log null
}
Vue代码:
let data = {
policy: this.policy
};
axios
.post('Controller/createPolicy', data, {
headers: {
'Content-Type': 'application/json'
}
})
这是我的htaccess:
RedirectMatch 404 /\.git
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/server-status
RewriteRule ^(.*)$ index.php/$1 [L]
什么可能导致此问题?
当
Content-Type
设置为 application/json
时,数据在请求正文中以原始 JSON 形式发送。
CodeIgniter 3 本身不支持将 Content-Type: application/json 请求中发送的 JSON 输入解析为 $this->input->post()。相反,需要 php://input 来处理 JSON 数据。
您可以使用以下方式解析它:
$rawPostData = file_get_contents('php://input');
$decodedData = json_decode($rawPostData, true);
$policy = isset($decodedData['policy']) ? $decodedData['policy'] : null;