是否可以在 Slim 中调用外部 js 文件中的路由

Is it possible to call a route in an external js file in Slim

在我的 twig 文件中,我正在调用一条通往我的 ajax 的路由,就像这样

var fund = $('#fund');

        //this will call php to populate fund drop-down
        $.ajax({
        url: "{{ path_for('myfundrequest') }}",
        type: 'get',
        dataType: 'json'
        }).done(function (response) {
        var len = response.length;

        fund.empty();

        for (var i = 0; i < len; i++) {
        var fundNum = response[i][0];
        var fundName = response[i][1];

        fund.append("<option value='" + fundNum + "'>" + fundNum + ' -- ' + fundName + "</option>");
        }
        fund.prepend("<option value=''>- Select A Fund -</option>").val('');
        }).fail(function (jqXHR, textStatus, error) {
        console.log("getFund: " + error);
        });
        });

这是我的路线

$app->get('/fundrequest', 'PoEntryController:funds')->setName('myfundrequest');

我的问题是,如果我在 public 文件夹中创建一个外部 js 文件 是否可以在外部文件中使这项工作 url: "{{ path_for('myfundrequest') }}

不,在普通 JavaScript 文件上不可能,但是

我能想到两个方案:

  1. 将 JavaScript 文件添加为 twig 文件,然后在路线上用 twig 渲染它。

    $app->get('/data/myScripts.js', 'ScriptProvider:myScript');
    
    class ScriptProvider {
        public function myScript($req, $res) {
            return $this->view->render($res, 'data/myScript.js.twig');
        }
    }
    
  2. 将 url 作为全局变量添加到全局对象上

    index.twig

    <!-- [..] -->
    <script>
       Url = {
           myfundrequest: "{{ path_for('myfundrequest') }}"
       };
    </script>
    

    然后使用 Url.myfundrequest 作为 JavaScript

    中的 url
    $.ajax({
        url: Url.myfundrequest,
        ..
    

第二个选项会更高效,因为 twig 引擎不需要 运行。