Php 如何在js文件中获取路由路径

Php 如何在js文件中获取路由路径,php,jquery,mongodb,symfony,Php,Jquery,Mongodb,Symfony,我有一个新的.html.twig,我在这个页面上使用了一些ajax调用来更改下拉列表中的事件 因此,我创建了一个名为new.js的septate js文件,并将所有JavaScript代码保存在该文件中,而不是将其写入同一个视图文件中 但是在这个js文件中,我无法访问称为ajax请求的路由路径。关于变革事件 ===========New.twig.html===================== include(new.js); <select><name='

我有一个新的.html.twig,我在这个页面上使用了一些ajax调用来更改下拉列表中的事件

因此,我创建了一个名为new.js的septate js文件,并将所有JavaScript代码保存在该文件中,而不是将其写入同一个视图文件中

但是在这个js文件中,我无法访问称为ajax请求的路由路径。关于变革事件

===========New.twig.html=====================
    include(new.js);
    <select><name='a' onchange="setLabel('123')"></select>
    ============new.js.=============        
    function setLabel(voucherTypeID) {           
    queryString = "voucherTypeID=" + voucherTypeID;
    $('#loading-image').show();
    $.ajax({
    type: "POST",
    url: "{{path('vouchergeneration_getLedgers')}}", //THIS PATH How TO GET
    data: queryString,
    cache: "false",
    dataType: "html",
    success: function (data){
    });
=============New.twig.html=====================
包括(new.js);
===============================new.js.==============================
函数setLabel(voucherTypeID){
queryString=“voucherTypeID=”+voucherTypeID;
$(“#加载图像”).show();
$.ajax({
类型:“POST”,
url:{{path('vouchergeneration_getLedgers')}},//此路径如何获取
数据:查询字符串,
缓存:“false”,
数据类型:“html”,
成功:功能(数据){
});

因此,在此我无法访问URL路径,而之前它可以在twig文件中访问。请指导我如何修复此问题。我不想使用任何类型的捆绑包来完成此简单工作。提前感谢。

此简单工作有非常简单的捆绑包

启用此捆绑包后,您只需执行以下操作

Routing.generate('my_route_to_expose', { id: 10 }); // will result in
/foo/10/bar

Routing.generate('my_route_to_expose', { id: 10, foo: "bar" }); //
will result in /foo/10/bar?foo=bar

$.get(Routing.generate('my_route_to_expose', { id: 10, foo: "bar" }));
// will call /foo/10/bar?foo=bar

Routing.generate('my_route_to_expose_with_defaults'); // will result
in /blog/1

Routing.generate('my_route_to_expose_with_defaults', { id: 2 }); //
will result in /blog/2

Routing.generate('my_route_to_expose_with_defaults', { foo: "bar" });
// will result in /blog/1?foo=bar

Routing.generate('my_route_to_expose_with_defaults', { id: 2, foo:
"bar" }); // will result in /blog/2?foo=bar
编辑: 当然,您可以不使用bundle(我认为这不是一个好主意)。在这种情况下,我建议在controller的操作中设置路由,并在twig模板中设置use it来设置js变量。类似于:

控制器:

public function indexAction()
{
    return array('yourRoute' => $router->generate('yourRoutName'));
}
<script type="text/javascript">
    var yourRoute = '{{yourRoute}}';
</script>
(...)
url: yourRoute,
(...)
您的模板:

public function indexAction()
{
    return array('yourRoute' => $router->generate('yourRoutName'));
}
<script type="text/javascript">
    var yourRoute = '{{yourRoute}}';
</script>
(...)
url: yourRoute,
(...)

如果要嵌入URL并通过JS获取,可以执行以下操作:

// HTML/Twig
<html data-my-route="{{ path('vouchergeneration_getLedgers') }}">
    ...
</html>

它避免使用全局变量,并且您可以使用任意多的数据属性。

如果您使用fetch,则可以使用data获取文章的url。url:

  fetch('/check', {
      method: 'POST', // or 'PUT'
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(qrinfo)
    })
    .then((data) => {
      let url = data.url;
      if(url.includes('/leave.html')) {
        window.location.replace('/leave.html');

      }
      else {
        console.log("Page not changed.");
      }
      console.log('Success:', data);
    })
    .catch((error) => {
      console.error('Error:', error);
    });

您可以使用
.includes()检查url中是否包含路径名
所以更改端口不会成为问题。

事实上,到目前为止,我还没有在我的应用程序中使用任何类型的捆绑包。因此,请告诉我解决此问题的其他方法。如果没有FOS路由捆绑包,请检查我的编辑,但我看不到避免捆绑包的意义。
细枝
原则
等-这些都是捆绑包,所以你是不管用哪种方法。你为什么要重新发明轮子?在控制器中生成路由并将其传递给Twig没有真正的好处。你可以使用path()和url()Twig中的函数。我可以这样使用吗:因为我在同一个Twig上有5-6个ajax调用,用于不同的目的。相反,我们可以在Twig文件中只写一个标记。。您可以添加任意多的数据属性;)如
。您明白了吗?顺便说一句,我建议您只使用一个路由来过滤数据根据参数的结果,如有可能:)