如何在zend中通过控制器重定向页面

时间:2012-02-06 22:09:32

标签: zend-framework redirect

当我点击提交按钮时,我希望页面重定向到以下页面?

header('Location: /pdp/policy-info.phtml');

我在控制器代码中编写了上述代码,但我无法重定向到上面的页面。它停留在同一页面上。 文件名在视图中称为policy-info.phtml。

一旦我重定向,我能通过$ _POST访问我的表单值吗? 或者有其他选择。

2 个答案:

答案 0 :(得分:7)

好吧,听起来好像你可能错过了一些概念:

  • 您永远不会重定向到phtml文件。 (除非你已经编写了一些自定义重写/路由规则)Zend使用MVC架构,网址以这种方式存在:

    /module/controller/view/key1/value1/keyx/valuex/
    通常zend url不会终止文件扩展名。此外,您永远不会直接从浏览器调用视图文件。

  • 在表单标记中,您可以使用action属性指定表单提交的位置。对于您的网址,我假设是pdp控制器和策略信息操作

    action="/pdp/policy-info/"
  • 如果您想在使用控制器提交表单后重定向,请使用:
    $this->_redirect('/pdp/policy-info/'); 

    # maybe you want to execute some code and then execute 
    # additional code in another controller without re-bootstrapping
    $this->_forward('policy-info', 'pdp');

http://framework.zend.com/manual/en/zend.controller.action.html#zend.controller.action.utilmethods

  • 如果您重定向,除非您将这些值保存在其他地方(例如在会话中),否则您将无法访问POST。如果你转发,我相信在第二个动作中仍然可以使用这些值。

答案 1 :(得分:0)

实际上可能有几种方法可以做你想做的事情。我还没有尝试过第一种方法,但它应该可行。

  • 如果是isPost(),则从控制器/操作中渲染一个新的veiw脚本:

    public function myAction(){
    $form = My_Form();
    $this->view->form = $form;
    
    //if form is posted and submit = Submit
    if ($this_request->isPost() && $this_request->getPost()->submit == 'Submit') {
        if ($form->isValid($this->_request->getPost()) {
        //this is where you want to capture form data
        $data = $form->getValues();
        //render a new viewscript or _forward to a new action and perform your processing there.
        $this->render('path to phtml file');
        //if user needs to press a button to accept submit = accept
        ...do some more stuff...
            }
        }    
    }
    

    我认为这个或某些变体会起作用。
    注意:我认为_forward不会重置请求对象,因此不应影响$ _POST数据。

此外,如果此政策信息不需要用户提供额外输入且只是提供信息,您可以轻松地_forward('action')进行空白操作,路由器将显示视图脚本。