如何在twig传递参数中生成url?

时间:2017-09-23 02:36:15

标签: php symfony parameters get twig

也许这是一个愚蠢的问题,但我花了很多时间试图让它发挥作用......

这是来自我的路由文件:

holder.bg.setBackgroundResource(R.drawable.bubble_green);

我的树枝模板:

search:
  path: /search
  defaults: { _controller: MyAppBundle:Default:search}

我的控制员:

{{ path('search', {'value': value}) }}

我的问题如下,上面的数据我正在生成这个网址:

public function searchAction(Request $request){
        $value = $request->query->get('value');

而不是我想要的网址:

/search/value

我更喜欢干净的网址,但我需要使用“?”传递网址中的值由于我需要在URL中传递不同的值,并且在不同情况下可以省略其中一些

2 个答案:

答案 0 :(得分:1)

为什么不这样做呢:

search:
  path: /search/{value}
  defaults: { _controller: MyAppBundle:Default:search}
public function searchAction(Request $request, $value){
        // Do something with $value...

它没有解决URL问题,但您可以在Twig文件中轻松设置value参数,这是在Symfony中执行此操作的标准方法。

编辑#2 - 基于评论。

我做的是这样的:

{{ path('searchPet',{'petID': pet.getPetId}) }}

在上述情况中,searchPet是路线,petID是参数名称,pet.getPetId是我的pet方法;其中pet是我传入控制器的请愿权(Twig呈现);所以我打电话给getPetId(),它返回请愿书的ID。

因此,如果您使用param作为变量在Controller中进行渲染:

return $this->render('search.html.twig', array(
                'param' => 'test',
                ...
            ));

然后在Twig中这样做:

{{ path('search', {'value': param}) }}

在这种情况下,网址将是/search/test

编辑#3 - 基于最后评论。

引用您要发送的值,因此您要发送'test',请执行以下操作:

{{ path('search', {'value': 'test'}) }}

我测试了它 - 它有效。

答案 1 :(得分:0)

如果您遇到此问题,请检查您是否未在路由文件中传递参数,并检查您的html中是否有表格作为方法(如果您有任何带有post方法的表单,改变它来解决问题)