如何从 Request::createFromGlobals() 访问 Symfony 3.4 对象值

How to access Symfony 3.4 object values from Request::createFromGlobals()

我正在尝试在遗留项目中使用 Symfony 3.4 组件。有一个表格有两个字段 city 和 state。我想将这两个字段发送到 class 方法。因此,我构建了一个中间 PHP 文件来将数据传递给使用 javascript。表格和 javascript 在这里。

     <form class="form-inline" id="addpharmacies">
    <div class="form-group">
        <label for="city" ><?php print xlt("City");?></label>
        <input type="text" class="form-control" id="city">
    </div>
    <div class="form-group">
        <label for="state"><?php print xlt("State");?></label>
        <input type="text" class="form-control" id="state">
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary" >Submit</button>
    </div>
</form>

let f = document.getElementById('addpharmacies');
f.addEventListener('submit', importPharm);

function importPharm() {
top.restoreSession();
let city = document.getElementById("city").value;
let state = document.getElementById("state").value;
if (city.length === 0 || state.length ===0) {
    alert("City and state must both be filled out") 
    return false;
}
let body = {"city": city, "state": state};
let req = new Request('pharmacyHelper.php', {method: "POST", body: body});
fetch(req)
    .then(response=> {
        if (response.status === 200) {
            return response.json()
        } else {
            throw new Error("Bad response from the server");
        }
    })
    .then(json => {
        alert(json) // Not a great UI experience
    })

}

如您所见,我正在使用侦听器通过 javascript 函数 importPharm 提交表单。 javascript 通过对城市和州字段的 getElementById 调用从表单中获取数据。

创建请求并将数据传递到请求中并调用帮助文件传递数据。我已验证某些内容正在发送到帮助程序文件。但是当我执行 getContent() 时,我可以看到是 [object Object]。

 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;

 $request = Request::createFromGlobals();
 $content = $request->getContent();
 file_put_contents("api.txt", $content);

当我尝试时:

    $request->request->get('city','');

我一无所获。我已经尝试了在 Symfony Site

上可以找到的所有组合

任何建议将不胜感激。

好吧,您还没有指定任何 header 来阐明您的 content-type,因此 Symfony 无法检测您的内容类型并将它们映射到 Parameter Bag(尽管它显示内容 body) ,尝试添加 :

Content-Type : application/x-www-form-urlencoded

header 并将您的表单输入发送为 form-data 并重试,否则您将需要 json_decode 内容 body 并将其作为数组或 \StdClass object .

处理

N.B :使用 form-data 你的请求看起来像这样

let body = "city="+city+"&state="+state;
let req = new Request('pharmacyHelper.php', {
    method: "POST",
    headers: {
        'Content-Type': 'application/x-www-form-url-encoded', 
        'Accept': 'application/json'
    },body: body});
fetch(req).then(response=> {
                    if (response.status === 200) {
                        return response.json()
                    } else {
                        throw new Error("Bad response from the server");
                    }
                })
                .then(json => {
                    alert(json) // Not a great UI experience
                })