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

问题描述 投票:0回答:3

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

这是来自我的路由文件:

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 中传递不同的值,并且在不同的情况下可以省略其中一些值

php symfony parameters get twig
3个回答
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
作为变量:

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

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

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

那么 URL 将是这种情况:

/search/test


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

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

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

我测试过这个 - 它有效。


0
投票

如果您遇到此问题,请检查您是否没有在路由文件中传递参数,并检查您的 html 中是否没有使用 post 作为方法的表单(如果您有任何使用 post 方法的表单,请更改它获取即可解决问题)


0
投票

你的控制器将是这样的:

#[Route('/place_payment/{id}', name: 'place_payment', methods: ['GET', 'POST'])]
public function addPayment(Request $request, Place $place, int $id): Response
    {
        $idPayment = (int) $request->query->get('idPayment');

你的树枝会像:

{% for payment in existingPayments %}
   <a href="{{ path('user_place_payment', {'id': place.id, 'idPayment': payment.id }) }}">{{ payment.name }} - delete this payment method</a><br><br>
{% endfor %} 
{% for payment in missingPayments %}
    <a href="{{ path('user_place_payment', {'id': place.id, 'idPayment': payment.id }) }}">{{ payment.name }} - add this payment method</a><br><br>
{% endfor %} 

因此,您会得到类似 your_server/place_ payment/103?idPayment=3 的 URL

© www.soinside.com 2019 - 2024. All rights reserved.