如何从 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
})
我正在尝试在遗留项目中使用 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
})