【问题标题】:How to generate url in twig passing parameters?如何在 twig 传递参数中生成 url?
【发布时间】:2017-09-23 02:36:14
【问题描述】:

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

这是来自我的路由文件:

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

我的树枝模板:

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

还有我的控制器:

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

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

/search/value

而不是我想要的网址:

/search?value=value

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

【问题讨论】:

  • 查看我的 EDIT #2 cmets。
  • 它必须工作!如果您将参数传递给树枝中的路径而不将此参数添加到路由中,它将向您显示 url 中的变量而没有干净的 url

标签: php symfony parameters get twig


【解决方案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。

所以如果你在 Controller 中这样渲染,param 是变量:

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

然后在 Twig 中执行以下操作:

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

那么在这种情况下 URL 将是:/search/test


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

引用您要发送的值,因此您要发送“测试”,请执行以下操作:

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

我对此进行了测试 - 它有效。

【讨论】:

  • 感谢您的回复。我总是以这种方式配置路由,但正如你所说,这并不能解决 URL 问题。如何在 twig 中设置 value 参数?我知道我可以手动创建 url,但我宁愿不要手动创建(例如,为了避免将来不得不更改域)
  • 是的,我明白你的意思。但我没有任何问题将我的价值观传递给树枝(如果我理解正确的话)。我的问题是在 twig 中生成 url,如果我把所有的都放在那我得到 /search/value 而不是 /search?value=value 我需要第二个选项
  • 不,它不等于“值”,如果你使用假设getMyValue 并返回一个整数。 URL 将是/search/34237,即如果getMyValue 以整数形式返回34237。你明白吗?它不等于 value!
  • 是的,我知道如果我将一个实体传递给我的 twig 模板并且我的实体中有一个 getter,我将可以访问该值。但就我而言,我没有将实体传递给我的树枝模板,它只是一个字符串。假设字符串是“test”,所以我想要以下 url:/search?value=test 我想也许我没有在我的示例中输入最佳值
  • 查看我的第二次编辑。我不知道你为什么要传入一个字符串?这根本没有意义!通常你会传入一个查询的结果集——它是动态的。换句话说,您进行搜索并传入搜索结果。
【解决方案2】:

如果您遇到此问题,请检查您没有在路由文件中传递参数,并检查您的 html 中是否没有带有 post as 方法的表单(如果您有任何带有 post 方法的表单,将其更改为 get 将解决问题)

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 2018-07-05
    • 1970-01-01
    • 2015-04-03
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多