使用 Twig 和 Symfony2 在 javascript 中生成路由

发布于 2024-12-07 19:08:20 字数 818 浏览 1 评论 0原文

很奇怪的问题,很抱歉问,我对 Symfony/Twig 很陌生。我的路线需要强制性 region_id 参数:

ajax_provinces_by_region:
  pattern: /ajax/region/{region_id}/provinces
  defaults: {_controller: SWAItaliaInCifreBundle:Ajax:provincesByRegion }
  requirements: {region_in: \d+}

问题是:我如何根据 javascript 中的 select 元素生成此路线(代码如下) ?

问题是:我无法使用 Symfony 的 pathurl 帮助程序,因为它们需要指定 region_id参数 (this.value) 我无法访问,因为它是一个 javascript 变量(并且 Twig 是在服务器端编译的)。

$(document).ready(function() {
    $('select#regions').change(function(){

        // Make an ajax call to get all region provinces
        $.ajax({
            url: // Generate the route using Twig helper
        });

    });
});

Quite odd problem, sorry for asking, i'm quite new to Symfony/Twig. My route requires a mandatory region_id paramenter:

ajax_provinces_by_region:
  pattern: /ajax/region/{region_id}/provinces
  defaults: {_controller: SWAItaliaInCifreBundle:Ajax:provincesByRegion }
  requirements: {region_in: \d+}

The question is: how can i generate this route based on a select element in javascript (code below)?

The problem is: i can't use path and url helpers from Symfony as they require to specify the region_id parameter (this.value) i can't access because it's a javascript variable (and Twig is compiled server-side).

$(document).ready(function() {
    $('select#regions').change(function(){

        // Make an ajax call to get all region provinces
        $.ajax({
            url: // Generate the route using Twig helper
        });

    });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

蓝咒 2024-12-14 19:08:20

我知道这是一个老问题,但以防万一您不想安装像 FOSJsRoutingBundle 这样的包,这里有一个小技巧:

var url = '{{ path("yourroute", {'region_id': 'region_id'}) }}'; 
url = url.replace("region_id", this.value);

“region_id”仅用作占位符,然后您在 JS 中将其替换为实际变量 this。价值

I know it's an old question, but just in case you don't want to install a bundle like FOSJsRoutingBundle, here's a little hack:

var url = '{{ path("yourroute", {'region_id': 'region_id'}) }}'; 
url = url.replace("region_id", this.value);

'region_id' is just used as a placeholder, then you replace it in JS with your actual variable this.value

一刻暧昧 2024-12-14 19:08:20

您可以使用 FOSJsRoutingBundle

You can use the FOSJsRoutingBundle.

熟人话多 2024-12-14 19:08:20
url:  "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"

其中 SampleBundle_route 是在routing.yml 或注释中定义的有效路径。

为了进行测试,请在 twig 模板中写入以下内容:

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>
url:  "{{ path('SampleBundle_route',{'parameter':controller_value}) }}"

Where SampleBundle_route is a valid path defined in routing.yml or annotatins.

For testing, write this in the twig template:

<script>
    var url= "{{ path('SampleBundle_route') }}";
    alert(url);
</script>
风蛊 2024-12-14 19:08:20

您可以在 HTML 中使用 data 属性:

<select id="regions">
    {% for region in regions %}
        <option data-path="{{ path('ajax_provinces_by_region', {'region_id': region.id}) }}">...</option>
    {% endfor %}
</select>

然后在 javascript 中使用:

$('select#regions').on('change', function() {

    let path = $(this).find(':selected').data('path')

    $.ajax({
        'url': path
    })
})

You can use data attribute in your HTML:

<select id="regions">
    {% for region in regions %}
        <option data-path="{{ path('ajax_provinces_by_region', {'region_id': region.id}) }}">...</option>
    {% endfor %}
</select>

then in your javascript:

$('select#regions').on('change', function() {

    let path = $(this).find(':selected').data('path')

    $.ajax({
        'url': path
    })
})
魂牵梦绕锁你心扉 2024-12-14 19:08:20
 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})
 * @Route("/{id}/edit", name="event_edit", options={"expose"=true})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文