【问题标题】:Twig template access old variable value in Symfony 3.4Twig 模板在 Symfony 3.4 中访问旧变量值
【发布时间】:2018-11-14 16:34:47
【问题描述】:

我正在努力解决 Symfony 3.4 中与 Twig 相关的问题。基本上,我有两个变量,我想将它们用作模板中 javascript 的值。 这两个变量($selected_tipoopera$selected_year)可以通过由呈现模板的同一控制器管理的表单进行更改。

控制器的代码如下所示:

    $selected_tipo_opera = "S"; // the default value
    $selected_year = ""; // the default value

    // other stuff / code (form creation and management of form events)

    $form_operas_type_and_year->handleRequest($request);

    if($form_operas_type_and_year->isSubmitted() && $form_operas_type_and_year->isValid()){
        $selected_tipo_opera = $form_operas_type_and_year->getData()["operas_type"];
        $selected_year = $form_operas_type_and_year->getData()["year"];
    }


    // fetch data based on $selected_tipo_opera and $selected_year

    return $this->render('frontend/opere.html.twig', 
        array(
            "opere" => $opere,
            "form_operas_type_and_year" => $form_operas_type_and_year->createView(),
            "selected_tipoopera" => $selected_tipo_opera,
            "selected_year" => $selected_year
        ));

奇怪的是控制器捕捉到两个变量值的变化,而树枝模板总是为$selected_tipoopera$selected_year打印“S”和“”。

我做错了什么?它与表单有关吗?

提前感谢您的任何建议。

更新

<script type="text/javascript">
    var year = "{{ selected_year }}";
    var stp = "{{ selected_tipoopera }}";
</script>

【问题讨论】:

  • 你能告诉我们Twig模板代码在哪里呈现这些变量吗?
  • @yceruto 帖子已用树枝代码更新
  • @yceruto 我找到了解决方法!我无法在 javascript 中但在 html 中打印变量。因此,我可以使用 javascript(例如 jQuery)访问 html 元素来获取它们的值。但是我认为应该可以将 Twig 与 Symfony 变量一起使用并进行某种类型的转义(但我找不到正确的方法!)。

标签: php symfony twig symfony-3.4


【解决方案1】:

这里有一些可能会有所帮助的东西。背景:网站首页显示了一个使用highcharts创建的图表,这是一个javascript图表生成器。因为图表需要数据库中的值,所以我需要创建一个可以用作 javascript 的 Twig 模板。

键:包含 javascript 的 ...js.twig 文件、用于呈现(不是 renderView)模板的控制器操作,以及在需要脚本插入脚本的页面中的 render(controller(...))

所以我有:

script.js.twig

$(document).ready(function () {
    var options = {
        chart: {
            type: 'line'
        },
        title: {
            text: 'Distributions, FY{{ chart.fy }} to date'
        },
        xAxis: {
            categories: [{% for category in chart.categories %}{{category|raw}}{%endfor%}]
        },
        yAxis: {
            title: {
                text: 'Distributions'
            }
        },
        series: {{ chart.series|raw }}
    };

    $('#linechart').highcharts(options);
})

并且在 index.html.twig 中"

<script type="text/javascript">
    {{ render(controller('AppBundle:Default:script')) }}
</script>

在 ../Controller/Default/script 中

public function scriptAction(FYChart $fiscalYearChart)
{
    $chart = $fiscalYearChart->getDistsFYToDate();

    return $this->render('Default/script.js.twig', array(
                'chart' => $chart,
    ));
}

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2013-11-02
    • 2012-05-04
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多