使用我的一个控制器,代码在不在IF语句中时工作正常但是当它放在一个控制器中时它不会将所需数据(notification_id)添加到数据库中。
代码:
public function devicesUidDataFunctionAction($id)
{
if (isset($_GET['notification_id'])) {
$notification_id = $this->getRequest()->get('notification_id');
$em = $this->getDoctrine()->getManager();
$query = $em->createQueryBuilder();
$q = $query->update('AppBundle:Users', 'z')
->set('z.notification_id', '?1')
->where('z.id = ?2')
->setParameter(1, $notification_id)
->setParameter(2, $id)
->getQuery();
$p = $q->execute();
return new Response("", 200, array("content-type"=>"text/html"));
}
else {
$lat = $this->getRequest()->get('location[lat]', null, true);
$lng = $this->getRequest()->get('location[lng]', null, true);
$acc = $this->getRequest()->get('location[accuracy]', null, true);
$em = $this->getDoctrine()->getManager();
$query1 = $em->createQueryBuilder();
$q = $query1->update('AppBundle:Users', 'z')
->set('z.lat', '?1')
->set('z.lng', '?2')
->set('z.acc', '?3')
->where('z.id = ?4')
->setParameter(1, $lat)
->setParameter(2, $lng)
->setParameter(3, $acc)
->setParameter(4, $id)
->getQuery();
$p = $q->execute();
return new Response("", 200, array("content-type"=>"text/html"));
}
}
代码的ELSE部分在ELSE语句中完美无缺地工作,这只是我遇到问题的前半部分。它确实返回200 OK,但没有任何内容添加到数据库中。
编辑 - 更多信息
这是进入控制器的URL:
http://[WEBSITE]/devices/135/data.json?notification_id=123456
源自一个Android应用程序,在logcat中有以下内容:
Sending using 'POST' - URI: http://[WEBSITE]/devices/135/data.json - parameters: {notification_id=123456, hardware_attributes[ram_size]=694}
答案 0 :(得分:0)
也许您正在检查的参数不在查询字符串中,但它是作为POST的一部分发送的?
要检查是否属实,您可以尝试替换
if (isset($_GET['notification_id'])) {
与
if (isset(**$_POST**['notification_id'])) {
还要考虑您应该使用这些说明访问$ _GET和$ _POST信息:
// $_GET parameters
$request->query->get('name');
// $_POST parameters
$request->request->get('name');
答案 1 :(得分:0)
这是因为你的if条件永远不会被满足,因此不执行它之后的代码。因为在symfony中我们使用Request对象来获取GET,POST和其他HTTP信息。
e.g。要获取GET参数,我们使用$this->getRequest()->query->get('paramName');
所以你应该像这样检查:
if(isset($this->getRequest()->query->get('notification_id')) {
//your stuff
}
修改强> 还请注意现在弃用的$ this-> getRequest()方法而是将Request类对象注入控制器并使用它。
e.g。
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
public function someAction(Request $request)
{
$id = $request->query->get('notification_id');
}