0

我已经拿起了 zend 框架并正在使用它,这是我想要实现的情况。
我有default并且user modules,用户有一个不同的布局user_layout,我加载predispatchNovelsController用户模块。我在 user_layout 中有一个小表单,post日期(从和到)到 NovelsController 的 showAction。

这是代码

<!-- the form inside user_layout -->
<form method="get" action="/user/novels/show">
   <table class="font">
      <tr>
          <td> <label for="to">From:</label></td>
          <td class="simple_margin_left"><input type="text" id="from" name="from" size="12"/></td>
      </tr>
      <tr>
         <td> <label for="to">To:</label></td>
         <td class="simple_margin_left"><input type="text" id="to" name="to" size="12" /></td>
      </tr>
      <tr>
         <td> </td>
         <td></td>
      </tr>
      <tr>

          <td colspan="2" align="center"><button type="submit" style="padding-left:10px; padding-right:10px; margin-left:0px" class="classy">Check</button> </td>
      </tr>
   </table>

</form>

我使用以下内容

$input = new Zend_Filter_Input($filters, $validators);
$input->setData($this->getRequest()->getPost());

到目前为止一切正常,我现在想启用对 show.phtml.so 的分页,所以我将表单操作更改为在 application.ini 中获取和定义路由,如下所示

resources.router.routes.user-show.route = /user/novels/show/:page/:from/:to
resources.router.routes.user-show.defaults.controller = novels
resources.router.routes.user-show.defaults.module = user
resources.router.routes.user-show.defaults.action = show
resources.router.routes.user-show.defaults.page = 1
resources.router.routes.user-show.defaults.from = ""
resources.router.routes.user-show.defaults.to = ""

我怎样才能使表单操作遵循该规则,因为到目前为止它只是一个带有问号和变量=值的普通查询字符串。

我怎样才能做到这一点?感谢您阅读本文。

4

1 回答 1

1

由于浏览器的工作方式,ZF 无法做到这一点(也不值得这样做)。

当以任何语言提交 GET 表单时,浏览器会将查询字符串构建为键值对并将其附加到操作中指定的 URL。

如果您坚持所有网址都“漂亮”,您有几个选择:

  • 编写代码以重定向到格式化地址
  • 使用重写规则重定向 (Apache mod_rewrite)
  • 使用 JavaScript 劫持表单的 onsubmit 方法(对没有 JavaScript 的用户不起作用)
于 2010-10-06T13:54:39.973 回答