将变量从Symfony2 PHP文件发送到js文件

Send variables from Symfony2 PHP file to js file

本文关键字:文件 js PHP 变量 Symfony2      更新时间:2023-09-26

我对JavaScript真的很陌生,我不能找到一些关于这方面的教程。如果有的话,请告诉我读一下。

我想做的是将变量从PHP控制器传递到。js文件-我想填充Highcharts变量。

我知道我可以发送响应,但是我也需要加载一个模板。

这是模板:

...
{% block body %}
 <h1>Months</h1>
 // This is the Chart:    
 <div id="container" style="width:100%; height:400px;"></div>
    {%block javascript%}
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script src="http://code.highcharts.com/highcharts.js"></script>
        <script src="{{ asset('bundles/acmebudgettracker/js/month.js') }}"></script>
    {%endblock%}
{% endblock %}

名为month.js的.js文件

      $(function () { 
$('#container').highcharts({
    chart: {
        type: 'bar'
    },
    title: {
        text: 'Budget for months'
    },
    xAxis: {
        categories: ['Spent', 'Saved']
    },
    yAxis: {
        title: {
            text: 'Fruit eaten'
        }
    },
    series: [{
        name: 'Jane',
        data: [1, 0, 4]
    }, {
        name: 'John',
        data: [5, 7, 3]
    }]
});

});

和控制器:

public function monthsAction()
{
    $this->setUser();
    $month_repository = $this->setRepository('Month');
    $month = new Month();
    $form = $this->createForm(new MonthType(), $month);
    $all_months = $month_repository->findByUser($this->user); 
    return $this->render('AcmeBudgetTrackerBundle:Months:months.html.twig', array(
        'all_months' => $all_months,
        'form' => $form->createView()
    ));
}

我想做的是给变量从控制器到month.js,仍然能够显示模板。有什么想法或教程来实现这一点吗?提前感谢!

你可以生成javascript作为小枝模板:

MonthsController.php

public function scriptAction()
{
    // some logic
    return $this->render('AcmeDemoBundle:Months:script.js.twig', array(
        'user_months' => $user_months
    ));
}

routing.yml

javascript_route:
  path:     /generated-scripts/month.{_format}
  defaults: { _controller: AcmeDemoBundle:Article:script, _format: js }
  requirements:
      _format:  js|json

script.js.twig

$(function () {
    var options = {
        chart: {
            type: 'bar'
        },
        title: {
            text: 'Budget for months'
        },
        xAxis: {
            categories: ['Spent', 'Saved']
        },
        yAxis: {
            title: {
                text: 'Fruit eaten'
            }
        },
        series: []
    };
    {% for user in user_months %}
    options.series.push({ name: '{{ user.name }}', data: [{{ user.months|join(',') }}] };);
    {% endfor %}
    $('#container').highcharts(options);
});​

快捷&"肮脏"的答案:使用balises在TWIG文件中设置变量,并在JS文件中使用这些变量。

<script>
    var foo = {{ bar }};
</script>