假设我有一个这样的链接:
<a href="<?php echo url_for('cart?item_id='.$cart->getItemId().'&a=b') ?>">Cart</a>
是否可以更改它而不是a
通过 POST 发送的查询参数,而不是在页面的 URL 中?相同的数据,只是在 URL 中不可见?
假设我有一个这样的链接:
<a href="<?php echo url_for('cart?item_id='.$cart->getItemId().'&a=b') ?>">Cart</a>
是否可以更改它而不是a
通过 POST 发送的查询参数,而不是在页面的 URL 中?相同的数据,只是在 URL 中不可见?
使用url_for
,这是不可能的。您必须使用link_to
并提供将post => true
POST 模拟为链接的选项:
- '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>
顺便说一句,正如文档所说,不要在表单中使用它..
您应该使用表单来实现您想要的。像这样的东西:
<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 特定的代码来做到这一点。