函数工作正常,直到它在IF语句中

时间:2015-04-07 15:45:36

标签: php symfony

使用我的一个控制器,代码在不在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}

2 个答案:

答案 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');

}