0

我有一个基于 symfony 2.3 的应用程序 在我的 twig 文件的 jquery 部分中,我需要访问一个 php 数组。我不确定如何实现这一目标。

我尝试了什么:

在控制器中:

public function indexAction() 
{
    ...
    $items = $em->getRepository('MyBundle:Item')->findBy(array(), array('position' => 'ASC')); 
    //$itemsjs = json_encode($items);
    ...
    return $this->render('MyBundle:Default:index.html.twig', array(
        ...,
        'items' => $items,
        'itemsjs' => $itemsjs,
        ...,
    ));
}

在 TWIG 文件的开头,我有:

<script>
var cal1 = $('#cal1');
var cal2 = $('#cal2');
...

function fillCalendar(mois, annee, cal)
{
    cal.css('display', 'none');
    var id = $(cal).attr('id');
...

function changeMonths(step)
{
    ...
    {% for item in items %}
        fillCalendar(newMonth-12*Math.floor((newMonth)/13), newYear+Math.floor((newMonth)/13), {{ 'cal' ~ item.id }});
    {% endfor %}
    ...

你能帮忙的话,我会很高兴 ...

编辑:关于我的应用程序的更多信息:这部分基于http://www.symfocal.com/ 但我需要修改日历的显示方式。
我修改了受您的答案启发的代码
无需将 php 数组转换为 json 格式 - 它传输到 twig,因此该数组应该可用于 twig。 我
得到 2 行,但只有第一行有效(出现天数 ) } 总是 cal1 - 但对于第二行,它应该成为 cal2 (数据库中有两个项目的 id 为 1 和 2)

EDIT2:我修改了代码:我替换了:

{{ 'cal' ~ item.id }}

经过 :

'cal{{ item.id }}' 

经测试

alert ('cal{{ item.id }}'); 

在循环中 => 有效但是在函数 fillCalendar 中我会收到一个以前没有的错误:未捕获的 TypeError: Object cal1 has no method 'css'

所以当我在循环中调用时:

fillCalendar(newMonth-12*Math.floor((newMonth)/13), newYear+Math.floor((newMonth)/13), 'cal{{ item.id }}' );

我在这条指令上得到这个错误: cal.css('display', 'none'); 但是我已经定义了 cal1 和 cal2 ,所以我不明白!

EDIT3:好的,感谢这篇文章,我也解决了这个问题: Uncaught TypeError: Object #<HTMLBodyElement> has no method 'css' 但是现在没有填写日期 - 元素的 id 似乎是正确的:

...
<td class="cell_calendar"><a id="cal1_cell_5" href="#"></a></td>
...

(在原始 symfocal 上,id 填充:

<a id="cal1_cell_5" href="#" title="2013-11-01">1</a> 

)

没有发生JS错误!

EDIT4:我在上面的源代码中添加了另一行:

var id = $(cal).attr('id');

我在它是 var id = cal.attr('id'); 之前更改了它 但是正如您在修改中看到的那样,我所做的这不再起作用了。只有在我看来,我无法以这种方式获取 id(稍后当我 ude id 未定义时)

我怎样才能让这个 id 使它工作?

EDIT5:原始问题已解决 - 对于最后一个 jquery 问题,我发了一个新帖子: Can't get attr id with jquery

谢谢你的帮助 !

4

1 回答 1

0

PHP 不是客户端语言,Javascript 是。你需要用twig写数组的内容,因为在js代码中你不能访问php数组:

<script>
var items = {{ itemsjs }};
...
{% for i in items %}
    alert ('{{ i.name }}');
{% endfor %}

...
于 2013-11-01T15:26:51.903 回答