【发布时间】:2016-08-13 07:22:30
【问题描述】:
Twig 使我的数组键格式不正确,并将“”括号添加到从 symfony2 控制器传递的数组键中。
数组被传递给一个Javascript图形库,它需要:
[{x:"disabled test object",y:"17",label:"disabled test object"}]
而不是{{ array|json_encode|raw }},正如我阅读过的 Twig 文档和其他 SO 问题所建议的那样,返回不可读:
[{"x":"disabled test object","y":"17","label":"disabled test object"}]
我认为这应该不难实现,但到目前为止通过 json_encode 选项并没有得到明确的答案。我不确定是否可以通过 PHP 做一些事情,所以我现在添加了标签。
编辑:
我现在正尝试使用 Twig 手动遍历数组。 {{dump(points)}} 确认已正确填写
{% set points = chart.dataPoints|json_encode|raw %} <=== this was the problem
dataPoints:
{% for point in points %}
{{ dump(point) }}
{ x: {{ point.x }}, y: {{ point.y }}, label: {{ point.label }} }
{% if loop.lastIndex != true %}
,
{% endif %}
{% endfor %}
但这也不起作用,因为永远无法到达转储。这是尝试通过 Twig 访问 foreach 中的对象的正确方法吗?此代码是几个 Twig 文档教程的合并。
编辑2,解决方案:
{% set points = chart.dataPoints|json_encode|raw %} 行将整个数组变成了一个字符串,使得 javascript 无法将其解释为数组。删除后,剩下的就是确保查询结果具有正确的数组键,并在将 X 轴数据传递给 Twig 之前对其进行转换。
$i = 0;
$points = array();
/** @var array $query_result*/
foreach($query_result as &$row) {
foreach($row as $value) {
$point[] = [
'x' => ($i)*10,
'y' => $value['y'],
'label' => $value['label']
];
$points[$i] = $point;
$i++;
}
}
【问题讨论】:
-
你想在 JavaScript 中使用数组吗?
-
更具体地说,我正在尝试使用 CanvasJS 绘制图形。示例:canvasjs.com/docs/charts/chart-types/html5-column-chart
-
或者,您可以在控制器中使用
json_encode(),将结果字符串存储在变量中并使用Twig(不带|json_encode|raw)显示它。 -
print_r 结果:Array ( [title] => Array test [dataPoints] => Array ( [0] => Array ( [x] => disabled test object [y] => 17 [label ] => disabled test object ) ) ) 并且 Symfony 期望在 this->render 中有一个数组
-
返回不可读的这段代码是可读的(我用online JSON validator测试过)。即使它们有引号,库也应该读取这些键。
标签: javascript php arrays symfony twig