0

假设我有一个这样的链接:

<a href="<?php echo url_for('cart?item_id='.$cart->getItemId().'&a=b') ?>">Cart</a>

是否可以更改它而不是a通过 POST 发送的查询参数,而不是在页面的 URL 中?相同的数据,只是在 URL 中不可见?

4

2 回答 2

1

使用url_for,这是不可能的。您必须使用link_to并提供将post => truePOST 模拟为链接的选项:

  • 'post' - 如果设置为 true,则链接提交 POST 请求而不是 GET(注意:不要在表单中使用)

代替:

<a href="<?php echo url_for('cart?item_id='.$cart->getItemId().'&a=b') ?>">Cart</a>

你应该写:

<?php echo link_to(
  'Cart',
  'cart?item_id='.$cart->getItemId().'&a=b',
  array('post' => true)
) ?>

这会产生一些非常丑陋的东西,但这会发送一个 POST 请求而不是一个 GET:

<a onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'post'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_csrf_token'); m.setAttribute('value', 'd9dbcba8c82084819006af93fbf8f961'); f.appendChild(m);f.submit();return false;" href="/cart/item_id/21/a/b">Cart</a>

顺便说一句,正如文档所说,不要在表单中使用它..

于 2013-01-29T21:01:10.940 回答
0

您应该使用表单来实现您想要的。像这样的东西:

<form id="form1" method="POST" action="cart?item_id=ITEM_ID">
    <input type="hidden" name="a" value="b" />
    <a href="#" onclick="document.getElementById('form1').submit();">Cart</a>
    <button type="submit">Cart</button>
</form>

如果你想使用一个<a>元素,你将需要 Javascript 来提交表单。但是你也可以使用一个button元素,你可以<a>用 CSS 来设置它的样式。代码示例中显示了这两个选项。

编辑: 我完全错过了您的问题与 Symfony 相关的事实,但这种方法可能仍然适用。但是 j0k 的答案显示了如何使用 Symfony 特定的代码来做到这一点。

于 2013-01-29T19:48:29.633 回答