使用Javascript在运行时使用Symfony和资产

使用Javascript在运行时使用Symfony和资产,javascript,symfony,assets,Javascript,Symfony,Assets,如官方文件所述,在细枝模板中,可以按如下方式链接到资产: <img src="{{ asset('images/logo.png') }}" alt="My logo" /> 这将呈现到logo.png资源的正确路径(取决于Symfony2应用程序所在的文件夹) 那么,假设使用一个Javascript代码,该代码必须在运行时加载一个图像(例如,作为自动完成的结果),如何在Javascript中实现Twig中的资产函数提供的相同结果 请注意: 也许存在类似的东西,但我真的忽略了它

如官方文件所述,在细枝模板中,可以按如下方式链接到资产:

<img src="{{ asset('images/logo.png') }}" alt="My logo" />

这将呈现到
logo.png
资源的正确路径(取决于Symfony2应用程序所在的文件夹)

那么,假设使用一个Javascript代码,该代码必须在运行时加载一个图像(例如,作为自动完成的结果),如何在Javascript中实现Twig中的
资产
函数提供的相同结果

请注意:

  • 也许存在类似的东西,但我真的忽略了它
  • 一种肮脏的方法可能是为已知资源生成路径,例如
    logo.png
    文件
    var known={{asset('images/logo.png)}}
    并通过将字符串
    images/logo.png
    替换为空字符串来检索路径。但这是一种肮脏的方式
    从js文件到图像的路径很可能保持不变。这使您可以在javascript文件中使用“硬编码”路径

    例如:

    web
     |
     |--js
     |   |
     |   |--foo.js
     |
     |--images
     |   |
     |   |--pic.jpg
    
    在这种情况下,您可以通过
    。/images/pic.jpg
    从foo.js访问pic.jpg
    请注意,此解决方案在细枝视图中不起作用,因为在细枝视图中,相对资产url取决于路由url。这就是您需要
    资产
    功能的原因。

    您只需从
    资产
    功能中删除文件名即可获得目录的绝对路径:

    
    var imgDir={{asset('images/')}
    
    Twig不仅可以呈现HTML,还可以呈现JS文件。您可以创建一个Twig模板,它将返回JS文件以及您需要的所有脚本。然后,您可以在此脚本文件中使用该细枝的所有功能。

    它似乎可以工作。但老实说,我在本地测试了它,只测试了一页。我应该多查几页+1并接受答案,直到有相反的证据为止@JeanValjean是的,但是我建议您也可以使用
    asset
    函数获取目录路径,而不是输出文件路径并剥离文件名。这意味着你不需要去除文件名,这使得它不会“脏”嗯,我测试了它,它真的很有效!这两个答案都是正确的,但这一个应该是公认的答案,因为它依赖于真正基于Symfony的解决方案,并且不需要对生产服务器上的文件夹结构有特定的了解。“将属于Caesar的东西交给Caesar”-Stackoverflow应该是一个好东西的宝库,提出问题的人有责任检查标记为已接受的内容的正确性!如果你使用
    assets\u version
    (),你必须删除版本的最后一部分。这与我的目标相去甚远!在运行时加载的JS文件中,我事先不知道将加载哪个图像,也不相信返回JS文件是一个好主意,因为我可以简单地返回JSON对象(字节越少越好!)