【问题标题】:Make form URL submission look like route instead of query string使表单 URL 提交看起来像路由而不是查询字符串
【发布时间】:2018-02-24 22:55:59
【问题描述】:

有没有办法更改表单提交时的默认 URL 格式?

这是我所拥有的:

<form action="<?php echo base_url('some_controller/some_method'); ?>" method="GET">
    <select name="foo">
        <option value="1">bar</option>
        <option value="2">Wubba lubba dub dub</option>
    </select>
    <button type="submit">Send</button>
</form>

当我点击按钮时,url变成:(not Wanted)

localhost/some_controller/some_method?foo=2

有没有办法让它像下面这样? (预期结果

localhost/some_controller/some_method/2

仅使用 PHP / Codeigniter 可以实现吗?或者在 HTML 中?
(可以在没有 javascript 和没有 htaccess 的情况下完成吗?)

我认为使用form_open 方法没有任何区别。

【问题讨论】:

  • 为什么不直接使用 POST 而不是 GET?
  • @BrianGottier 为 freeeeedom。不,但认真。为此:
  • 那么你的答案是否定的,这是不可能的。在将 HTML 输出发送到浏览器后,您无法通过 PHP 对其进行操作。您必须使用 javascript。
  • 这是一个详细的上下文: 我有一个前一页,其中包含该方法的锚点列表,该方法将值作为 GET 传递。该列表和此表格具有相同的目的。按照我预期的方式使用它,我可以使用相同的方法,而无需更改方法本身的任何内容。我可以重构它以使用参数或 POST 数据,或者甚至将此表单作为 POST 发送到另一个方法,并在那里调用另一个传递值的方法,就像列表一样。但我很好奇这是否可能......@BrianGottier
  • @FirstOne 绝对是:由于 action 参数,它知道将请求发送到哪里。但是,您(有效地)尝试做的是允许操作参数根据输入而变化。 HTML 并非旨在支持该用例:动作通过action 属性进入,这是一个固定字符串。使其动态化的唯一方法是使用 javascript。

标签: php html codeigniter


【解决方案1】:

这是因为您的方法是GET。如果您将方法更改为POST,该信息将从 URL 中消失。但是,它会产生不同的副作用,这取决于您的观点是好是坏:

  1. 如果在 codeigniter 中开启,Post 会将其置于 CSRF 保护范围内。
  2. 如果导航回作为 POST 提交结果的页面,您会从浏览器收到“您要重新提交吗?”类型的消息。

唯一的另一种选择是通过 javascript 在后台执行 ajax 请求。

【讨论】:

  • 我已经想到了一些替代解决方案,但我希望找到一个答案,说明如何按照预期的方式进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多