Slim $ app->渲染JSON API的问题

时间:2015-09-09 07:13:28

标签: php json api slim

这是一个相当简单的Slim $ app->渲染问题,但我正在使用SQL查询通过$result返回表中的列总数,并且存储在其中的数据看起来像这个:[{"total":"12345"}]

我想将其推送到JSON API,如下所示:

$app->get('/api/total/', function() use ($app) {
  $query = "select count(*) AS total FROM sometable";
  $data = $app->db->query($query);
  $result = $data->fetchAll(PDO::FETCH_OBJ);
  $app->render(
    200, json_encode(array(
      'total' => $result['total']
    ))
  );
});

如何制作Slim的$ app->渲染产生{total:12345}

执行'total' => $result['total']会引发错误,例如:

  

注意:未定义的索引:总计

1 个答案:

答案 0 :(得分:2)

这是因为fetchAll返回结果数组。您可以使用fetch()代替。检查fetch是否失败也是很好的。然而,在这种特殊情况下,如果存在某种情况,则不应该。你也使用fetch_obj,并尝试将其作为一个错误的数组访问。使用FETCH_ASSOC或使用FETCH_OBJ进行适当的对象访问。

$app->get('/api/total/', function() use ($app) {
  $query = "select count(*) AS total FROM sometable";
  $data = $app->db->query($query);
  $result = $data->fetch(PDO::FETCH_OBJ);
  if($result !== false) {
    $app->render(
     200, json_encode(array(
      'total' => $result->total
      ))
   );
  } else {
     $app->render(
     404, json_encode(array(
      'error' => 'Not Found'
      ))
   );
  }
 });

还记得设置内容类型

是好的
$app->response->headers->set('Content-Type', 'application/json');

如果您需要知道取件的工作方式,请检查:http://php.net/manual/en/pdostatement.fetch.php