大家好,我正在尝试将数组传递给js文件,但出现此错误:
在呈现模板的过程中引发了异常(“注意:数组到字符串的转换”)。
让我想要的是:data: ['2017/7','2017/8']
所以我这样做(在树枝上):data: '{{ user_month_month }}'
当我向user_month_month求婚时,这就是我得到的:
array(2) { [0]=> string(6) "2018-7" [1]=> string(6) "2018-8" }
所以我认为我在js部分称呼不好,我该怎么办?
如果您想要我的控制器:
public function GraphicShow()
{
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository('AppBundle:User')->countUsers();
$not_logged = $em->getRepository('AppBundle:User')->countNotActiveUsers();
$logged = $em->getRepository('AppBundle:User')->countActiveUsers();
$user_month_months = $em->getRepository('AppBundle:Profile')->countByMonthMonth();
$user_month_totals = $em->getRepository('AppBundle:Profile')->countByMonthTotal();
$array_totals = array();
$array_months = array();
foreach($user_month_totals as $user_month_total) {
$array_totals[] = intval($user_month_total["total"]);
}
foreach ($user_month_months as $user_month_month) {
$array_months[] = $user_month_month["month"];
}
$not_logged_result = $not_logged["number"] / $users["number"] * 100;
$logged_result = $logged["number"] / $users["number"] * 100;
var_dump($array_months);
die();
return $this->render('admin/user/pie_stats.html.twig', array(
'user_month_month' => $array_months,
'user_month_total' => $array_totals,
'user_not_logged' => $not_logged_result,
'user_logged' => $logged_result,
'users' => $users,
'loggedAs' => $this->getUser(),
'alert' => 0,
));
}
ps /编辑:日期用于图形,看起来像这样:
希望我能很好地解释,谢谢所有将要回答的人:p
使用DarkBee方法,我得到了:
答案 0 :(得分:6)
将数组从twig
传递到javascript
的最快方法是将数组转换为JSON
,为此twig
具有内置过滤器json_encode :
data: {{ user_month_month | json_encode | raw }}
答案 1 :(得分:2)
symfony建议的将信息从树枝传递到javascript的推荐方法是将信息存储在数据属性中,然后在JavaScript中读取它们。 Documentation here。
如果您有一个数组,则应使用它按预期工作:
<div id="your-div" data-yourArray="{{ yourArray|json_encode|e('html_attr') }}">
然后使用JSON.parse在javascript中反序列化您的数组。
DarkBee的答案不包括使用转义过滤器,这就是为什么它无法按预期工作的原因。
在您的JavaScript代码中:
var yourDiv = document.getElementById('your-div');
var yourArray = JSON.parse(yourDiv.dataset.yourArray);
答案 2 :(得分:1)
<input type="text" id="txt"> <!-- // 2017/7 2017/8 -->
<script>
date = '{{ user_month_month[0] ~ ' ' ~ user_month_month[1] }}';
alert(date); // 2017/7 2017/8
txt = document.getElementById('txt');
txt.value = "{{ user_month_month[0] ~ ' ' ~ user_month_month[1] }}";
</script>