如何在Twig上将javascript var插入路径?

时间:2016-06-17 22:11:13

标签: javascript php symfony twig

我想将javascript中声明的var插入到我的路径中以重定向我的页面。

我的代码是:

 var id = $(this).attr('data-id');
 windows.location = {{ path("mylink", {id: id}) }};

但我不知道如何将我的var id插入到路径中,因为当我尝试这个时我会收到错误,我试图用+'来解析它。 myvar' +所以连接文字,但我不能。

如何将我的var连接或添加到路径中?

谢谢!

3 个答案:

答案 0 :(得分:1)

因为PHP是在服务器端执行的,所以你需要通过这种方式绕过:

 var id = $(this).attr('data-id');
 var path = {{ path("mylink", {id: 0420}) }};

 windows.location = path.replace("0420", id);

答案 1 :(得分:0)

有一种方法可以在不使用javascript replace功能的情况下执行此操作。但是,它需要一些工作。

  1. 创建Twig扩展名以解码网址:

    namespace AppBundle\Twig\Extension;
    
    class UrlDecodeExtension extends \Twig_Extension
    {
        public function getFilters()
        {
            return array(
                new \Twig_SimpleFilter('url_decode', array($this, 'UrlDecodeFilter'))
            );
        }
    
        public function UrlDecodeFilter($url)
        {
            return urldecode($url);
        }
    
        public function getName()
        {
            return 'url_decode_extension';
        }
    }
    
  2. 注册新的扩展程序:

    url_decode_extension:
        class: AppBundle\Twig\Extension\UrlDecodeExtension
        tags:
            - { name: twig.extension }
    
  3. 最后,在Twig模板中使用它:

    var id = $(this).attr('data-id');
    windows.location = {{ path("mylink", {id: "%s"}) | url_decode | format('"+id+"') | raw }};
    
  4. 这是在浏览器中呈现的方式:

    var id = $(this).attr('data-id');
    window.location("/your/rendered/url/"+id+"");
    

答案 2 :(得分:0)

您应该考虑使用FOSJsRoutingBundle。它是最常用的捆绑包之一。它的唯一目的是将您想要的路线暴露给客户端。安装后,您的代码将是:

var id = $(this).attr('data-id');
windows.location = Routing.generate("mylink", {id: id});