如何让普通表单的动作跟随zend自定义路由?

时间:2010-10-05 18:23:20

标签: php zend-framework pagination zend-route

我已经选择了zend框架并正在玩它,这是我想要的情况 实现。
我有defaultuser modules,用户使用user_layout加载predispatch个用户模块的广告NovelsController。 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 = ""

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

我怎样才能实现这一目标?感谢您阅读本文。

1 个答案:

答案 0 :(得分:1)

由于浏览器的工作方式,这不能用ZF完成(并且不值得做)。

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

如果您坚持所有网址都“漂亮”,您可以选择以下几种方式:

  • 编写代码以重定向到格式化地址
  • 使用重写规则重定向(Apache mod_rewrite)
  • 使用JavaScript劫持表单的onsubmit方法(对没有JavaScript的用户不起作用)