2017-09-23 73 views
0

也许这是一个愚蠢的问题,但我花了很多时间试图使它的工作...如何在传递参数的树枝中生成url?

这是从我的路由文件:

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

我的树枝模板:

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

而且我的控制器:

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

我的问题是后续ING,上述数据我生成这个网址:

/search/value 

,而不是我想要的网址:

/search?value=value 

我喜欢干净的网址,但我需要使用通过在URL中的值“?”由于我需要在URL传递不同的价值观和他们中的一些可以在不同情况下

+0

请参阅我的编辑#2评论。 –

+0

它必须工作!如果您将参数传递给树枝中的路径而无需将此参数添加到路由,它将向您显示网址中的变量,而不会干净url –

回答

0

如果你面临这样的问题,请检查你是不是通过你的参数在你的路由文件,并检查你有没有一种形式,你的HTML与岗位作为方法(如果您有任何形式的POST方法,改变它得到将解决问题)

1

省略为什么不这样做,而不是:

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

public function searchAction(Request $request, $value){ 
     // Do something with $value... 

它不涉及URL问题,但是你可以很容易地在你的Twig文件中设置值参数,这是在Symfony中完成它的标准方法。


编辑#2 - 基于评论。

我做的是这样的:

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

在上述情况下,searchPet是路由,petID是参数名称,并pet.getPetId是我pet方法;其中pet是我已经传递给控制器​​(Twig呈现)的请愿Entitiy;所以我打电话getPetId(),它返回申请的Id。

所以,如果你在控制器这样的渲染param是变量:

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

然后在枝杈做到这一点:

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

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


编辑#3 - 根据最新评论。

报价要发送,所以要送“测试”的值,这样做:

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

我测试了这一点 - 它的工作原理。

+0

感谢您的回复。我总是以这种方式配置路由,但正如您所说的那样,并没有解决URL问题。如何在树枝中设置值参数?我知道我可以手动创建网址,但我宁愿不手动(例如,为了避免将来需要更改域名) –

+0

是的,我明白你的意思。但我没有任何问题通过我的价值观枝(如果我正确理解你)。我的问题是产生在树枝的URL,如果我在这方面,我都会越来越/搜索/值,而不是/搜索?值把所有=值我需要第二个选项 –

+0

没有也不会等于“值”,如果你使用让我们说'getMyValue'并返回一个整数。该URL可能是'/搜索/ 34237',即如果'getMyValue'返回'34237'为整数。你明白吗?它不等于“价值”! –