我如何处理来自“$this->request->getRawInput()”的数据 CodeIgniter4

How Can I Process Data From "$this->request->getRawInput()" CodeIgniter4

这是我的 ajax 方法,它从 html table

创建表单数据

$('#updateStudentInfoBtn').click(函数(e){

// var delcare
let studentUUID = $('[name=studentUUID]').val();
let apiUrl = "/api/students/studentUUID";
var formObj = {
    firstname : $('[name="firstname"]').val(),
    middlename : $('[name="middlename"]').val(),
    lastname : $('[name="lastname"]').val(),
    gender : $('[name="gender"] option:selected').val(),
    dob : $('[name="dob"]').val(),
    admission_date : $('[name="admission_date"]').val(),
    admission_stage : $('[name="admission_stage"]').val(),
    current_stage : $('[name="current_stage"]').val(),
    current_section : $('[name="current_section"]').val(),
    name_of_guardian : $('[name="name_of_guardian"]').val(),
    relationship_to_student : $('[name="relationship_to_student"]').val(),
    occupation : $('[name="occupation"]').val(),
    phone_no : $('[name="phone_no"]').val(),
};

var form_data = new FormData();

for ( var key in formObj ) {
    form_data.append(key, formObj[key]);
}

$.ajax({
    method: "PUT",
    url: apiUrl,
    data: form_data,
    processData : false,
    contentType : false,
    cache: false,
    success: function(res){
        response = JSON.stringify(res);
        if(response.status == 201) {
            // show success alert
        }

        //location.href="/admin/allstudents";
    },
    error: function(err){
        console.log(err);
    }
});

});

这是我的 php 脚本,用于检索通过 put 方法发送的数据;省略了 class 部分。

public function update($studentUuid = null)
{
    $studentModel = new StudentModel();
    $studentData = $studentModel->where('uuid',  $studentUuid)->first();

    $input = $this->request->getRawInput();
    return print_r($input);
}

print_r 的结果给我这个我不知道如何处理数据的文本::

Array ( [------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition:_form-data;_name] => "firstname" Phinehas ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="middlename " Toast ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="lastname" Mord ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="gender" 女 ------ WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="dob" 1989 年 11 月 11 日星期六 ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="admission_date" 2001 年 5 月 10 日星期四 -- ----WebKitFormBoundaryQFcTXWiBZMLhD6ea 内容配置:表单数据;名称="admission_stage" class 6 ------WebKitFormBoundaryQFcTXWiBZMLhD6ea 内容配置:表单数据;名称="current_stage" form 3 ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="current_section" 黄色 ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="name_of_guardian" 博士 [=2 4=] Sapaa ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="relationship_to_student" 父亲 ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="occupation" Manager ------WebKitFormBoundaryQFcTXWiBZMLhD6ea Content-Disposition: form-data; name="phone_no" xxx-xxx-xxxx ------WebKitFormBoundaryQFcTXWiBZMLhD6ea-- )

获取 formDAta() 使用


$this->request->getPost('item');


适用于 json 或 formData 请求正文


$raw=(array)$this->request->getVar()

为了测试使用 postman 所以下载它

second if json request set request postman to put

但如果 formDAta 请求设置请求 post 则添加此字段 形成数据值

var form_data = new FormData();

//this works for you
    form_data.append('_method', 'PUT');


https://codeigniter.com/user_guide/incoming/methodspoofing.html

for ( var key in formObj ) {
    form_data.append(key, formObj[key]);
}
 form_data.append('_method', 'PUT');


$.ajax({
    method: "POST",
    url: apiUrl,
    data: form_data,
    processData : false,
    contentType : false,
    cache: false,
    success: function(res){
        response = JSON.stringify(res);
        if(response.status == 201) {
            // show success alert
        }

        //location.href="/admin/allstudents";
    },
    error: function(err){
        console.log(err);
    }
});

我想通了,不知道它是否适用于每种情况,但它对我有用...我创建了一个帮助程序文件(以隐藏丑陋之处),它将值提取到常规关联数组中:

put_helper.php:

function getPut($raw_input)
{
    $input_string = $raw_input[array_keys($raw_input)[0]];

    preg_match('#\{(.*?)\}#', $input_string, $match);

    $json_string = '{' . $match[1] . '}';

    $data = (array) json_decode($json_string);

    return $data;
}`

在我的控制器中:

public function update($id = null)
{
    helper('put_helper');

    $data = getPut((array) $this->request->getRawInput()); 

`

我在网上找不到任何其他解决方案...

希望它能帮到别人 ;)