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

Zend framework 如何在zend中通过控制器重定向页面,zend-framework,redirect,Zend Framework,Redirect,当我点击提交按钮时,我想让页面重定向到下一页 header('Location: /pdp/policy-info.phtml'); 我在控制器代码中编写了上述代码,但无法重定向到上述页面。它保持在同一页上。 该文件名在视图中称为policy-info.phtml 此外,一旦我重定向,我是否可以通过$\u POST访问我的表单值? 或者有其他选择。好的,我觉得你可能缺少一些概念: 您永远不会重定向到phtml文件。(除非您编写了一些自定义重写/路由规则)Zend使用MVC架构,URL以这种方

当我点击提交按钮时,我想让页面重定向到下一页

header('Location: /pdp/policy-info.phtml');
我在控制器代码中编写了上述代码,但无法重定向到上述页面。它保持在同一页上。 该文件名在视图中称为policy-info.phtml

此外,一旦我重定向,我是否可以通过$\u POST访问我的表单值?
或者有其他选择。

好的,我觉得你可能缺少一些概念:

  • 您永远不会重定向到phtml文件。(除非您编写了一些自定义重写/路由规则)Zend使用MVC架构,URL以这种方式存在:/module/controller/view/key1/value1/keyx/valuex/ /module/controller/view/key1/value1/keyx/valuex/ 通常,zend URL不会以文件扩展名终止。此外,您永远不会直接从浏览器调用视图文件

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

action=“/pdp/policy info/”
  • 如果要在使用控制器提交表单后重定向,请使用:
$this->_重定向('/pdp/policy info/'); #也许您想执行一些代码,然后执行 #其他控制器中的附加代码,无需重新引导 $this->_forward('policy-info','pdp');

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

实际上,可能有几种方法可以实现您的目标。我还没有尝试过第一种方法,但它应该会起作用

  • 如果isPost(),则从控制器/操作呈现新的veiw脚本:

    我认为这或某些变化会起作用。
    注意:我不认为转发会重置请求对象,因此您的$\u POST数据不会受到影响


此外,如果此策略信息不需要用户的额外输入,只是信息性的,您可以轻松地将
\u转发(“操作”)
到一个空白操作,路由器将显示查看脚本。

唯一的选项是重定向。因为我正在进行错误检查和验证,并在表单页面中显示它。我希望除了会话之外还有其他的方法。你能给我举一个例子,说明如何在zend中使用像post这样的$\u会话吗?这将是你最好的解释。在zend中,您通常不会使用$\u会话,“虽然$\u会话在PHP的全局名称空间中仍然可用,但开发人员应该避免直接访问它”。 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');
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...
        }
    }    
}