也许这是一个愚蠢的问题,但我花了很多时间试图让它发挥作用......
这是来自我的路由文件:
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 中传递不同的值,并且在不同的情况下可以省略其中一些值
为什么不这样做:
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'}) }}
我测试过这个 - 它有效。
如果您遇到此问题,请检查您是否没有在路由文件中传递参数,并检查您的 html 中是否没有使用 post 作为方法的表单(如果您有任何使用 post 方法的表单,请更改它获取即可解决问题)
你的控制器将是这样的:
#[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