我的数据只显示我是否调试它。这是怎么回事?

时间:2014-10-21 14:19:38

标签: debugging stripe-payments cakephp-3.0

我正在使用Stripe的API并尝试检索数据。我有以下代码:

$data = \Stripe_Invoice::all(array(
"customer" => $user->customer_id
));

如果我将AJAX响应设置为$ data,则响应显示为空({})。如果我在后端调试它,我会得到一个巨大的列表,列出了各种令人敬畏的属性。我所做的就是:

debug($data); // returns huge data set

问题是我无法访问前端中的变量。我想用:

console.log(response);
html += response.url;

事情就是这样,但是由于某种原因,当前端解释数据时,数据完全是空的。

同样的效果,我也无法将其设置为会话(我曾经将会话日志设置为调试而不是使用调试功能)。

$data // can be accessed on the frontend if we use just php to set a variable
$_SESSION['log'] = $data; // empty

发生了什么事?我正在使用PHP框架CakePHP 3(最新版本的Beta)。我认为这与将数据返回序列化(可能是?)有关,但这并不能解释会话日志记录。这发生在我们发回数据之前:

    $this->set(compact('data', $data));
    $this->set('_serialize', 'data');

2 个答案:

答案 0 :(得分:0)

如果$ data不为空,那么你应该只使用控制器中的set方法

 $this->set(compact('data', $data));

你应该在/src/Template/ControllerName/json/methodName.ctp上有相应的视图(将ControllerName和methodName改为你拥有的)

这个文件应该是这个。

<?php
print json_encode($data);
?>

就是这样。您应该将客户端的数据作为json对象。

答案 1 :(得分:0)

结果证明,当阵列受到保护时,无法显示这些值。在Stripe对象上调用Stripe的方法__toArray()使数据可访问,并且设置已经过了这一点。

$data = \Stripe_Invoice::all(array(
    "customer" => $user->customer_id
));

$data = $data->__toArray();

$this->set(compact('data', $data));
$this->set('_serialize', 'data');