没有表格通过symfony发送帖子数据?

时间:2013-01-29 19:11:38

标签: php symfony-1.4

假设我有这样一个链接:

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

是否可以更改它而不是a作为查询参数而是通过POST发送它,以便它不会在页面的URL中?相同的数据,只是在网址中看不到?

2 个答案:

答案 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特定代码执行此操作。