【问题标题】:symfony2 how to access twig path by javascriptsymfony2如何通过javascript访问树枝路径
【发布时间】:2018-02-06 15:41:38
【问题描述】:

在 symfony2 中,这在 html.twig 文件中可以正常工作:

<a class="btn brl-next brl-btn" href="{{ path('new_message') }}">Next</a>

但目前,我需要通过 javascript 访问 path('new_message')

我试过了:

        nextButtons.each(function () {
            $(this).on('click', function () {
                $("a").prop("href", "{{ path('new_message') }}");
            });
        });

但它不起作用,有人可以帮助我如何通过 javascript 访问 symfony 路径吗?

【问题讨论】:

  • 可以使用FOSJsRoutingBundle(顺丰开发)
  • ^ +1 使用该捆绑包,因此您不必重新发明轮子。
  • 您可以将路由添加到您的树枝模板中的锚标记,如下所述:stackoverflow.com/a/24674562/1791606。这意味着您可以拥有独立的 javascript 文件,而不是在模板文件中混合使用 javascript 和 html。
  • @Debflav 我喜欢 FOSJsRoutingBundle 的理念,但这取决于您需要的频率。对于一个简单的 ajax 任务,您想在 routing.yml 中定义您的路线,您还可以使用属性制作一个简单的 div,如下所述:)

标签: javascript php symfony


【解决方案1】:

只需添加一个带有路径属性的 HTML 元素。我用它来获取我的 ajax 路由。请参见下面的示例:

dyncontent.html.twig

<div id="dyncontent" class="dyn" data-ajaxurl="{{ path("common_ajax") }}"></div>

我需要该 div 来将数据加载到其中,并且作为路径信息,我有 data-ajax 属性并定义了我的路径。

现在我可以用我的 Javascript 选择这条路径

dyncontent.js

var ajaxpath =  $("#dyncontent").attr("data-ajaxurl");
$.getJSON(ajaxpath , null, function(data) {
  //get JSON out of the right controller with correct path
}

我不确定你想用你的按钮做什么,但你也可以做

button.html.twig

<a class="btn brl-next brl-btn" href="#" data-path="{{ path('new_message') }}">Next</a>

并通过

获取信息

button.js

var new_message_path = $(".brl-btn").attr("data-path");

现在您的路径位于 new_message_path 变量中。但请考虑让您的选择器独一无二。

【讨论】:

    【解决方案2】:

    你可以这样做:

    在您的 layout.html.twig 中定义全局 js 变量,如下所示:

    <script type="text/javascript">
        var routes = {
            myroutes:{
                route1:"{{ path('my_symfony_route', {}, true) }}", // the true permits to use relative path
                route1:"{{ path('my_symfony_route2', {}, true) }}" 
            },
        };
    </script>
    

    然后在 yourjsfile.js 根据您的需要调用全局

    nextButtons.each(function () {
        $(this).on('click', function () {
            $("a").prop("href", routes.myroutes.route1);
        });
    });
    

    希望对你有帮助!

    【讨论】:

    • 它不起作用:它将直接转到:/{{ path('new_message', {}, true) }}
    • 这很奇怪,它对我有用...你能通过你的萤火虫控制台测试你的变量可见性吗?
    • 你在使用 FOSJsRoutingBundle 吗?
    • 不,我不使用 FOSJsRouting。
    • 您可以尝试不使用我在示例中添加的选项:routes = { myroutes:{ route1:"{{ path('my_symfony_route') }},
    【解决方案3】:

    就我而言,我使用所有路径

    例如,如果你的路由名称是:“new_message”,路径是/yourproject/web/app_dev.php/message/new,你可以在javascript中这样:

    var route='/docMessagerie/web/app_dev.php/protocol/updateProtocol/';
    

    它对我有用

    【讨论】:

      【解决方案4】:

      您可以像这样直接添加树枝路径语法。

      var commercial = '{{path('_commercial')}}';
      

      那么你可以这样调用

       window.location = commercial ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2014-11-03
        • 2013-04-30
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多