假设我有这样一个链接:
<a href="<?php echo url_for('cart?item_id='.$cart->getItemId().'&a=b') ?>">Cart</a>
是否可以更改它而不是a
作为查询参数而是通过POST发送它,以便它不会在页面的URL中?相同的数据,只是在网址中看不到?
答案 0 :(得分:1)
使用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>
顺便说一下,正如医生说的那样,不要在表格内使用它。
答案 1 :(得分: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
元素,您可以使用CSS将<a>
的样式与{{1}}完全相同。这两个选项都显示在代码示例中。
修改强> 我完全错过了你的问题与Symfony相关的事实,但这种方法可能仍然适用。但j0k的答案显示了如何使用Symfony特定代码执行此操作。