Zend Framework _forward不起作用

时间:2012-03-29 12:57:26

标签: php model-view-controller zend-framework

我正在尝试使用$this->_forward()转到同一个控制器中的其他操作,但它无效。我的代码是......

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->bodyCopy = "<p>Please select a file to upload.</p>";

        $form = new forms_UploadForm();

        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $this->_forward('displayFileContent');
            } else {
                $form->populate($formData);
            }
        } else {
            $this->view->form = $form;
        }

    }

    public function displayFileContentAction()
    {
        die("In displayFileContentAction");
    }
}

但我没有得到我的消息。我收到错误'Page not found'

任何帮助都会非常感激,因为我一直遇到这个问题。

4 个答案:

答案 0 :(得分:3)

你为什么要转发?只需执行代码,替换

$this->_forward('displayFileContent');

return $this->displayFileContentAction();

答案 1 :(得分:1)

您的代码应为:

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->bodyCopy = "<p>Please select a file to upload.</p>";

        $form = new forms_UploadForm();

        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                return $this->_forward('display-file-content');
            } else {
                $form->populate($formData);
            }
        } else {
            $this->view->form = $form;
        }

    }

    public function displayFileContentAction()
    {
        die("In displayFileContentAction");
    }
}

注意:

  • 要转发至您要求的操作,您必须转发至$this->_forward('display-file-content')。使用破折号代替驼峰。
  • 您应该向return添加$this->_forward('display-file-content'),否则您的当前操作将继续执行,然后转发给其他操作。
  • 您必须为其他操作创建一个视图并将其命名为display-file-content.phtml,或者只使用$this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); 禁用此操作的视图。

答案 2 :(得分:0)

为什么不试试

     $this->_redirect('/Controller/displayFileContent');

//Your action 

    public function displayFileContentAction(){
    $this->_helper->viewRenderer->setNoRender(true);
    $this->_helper->layout->disableLayout();
    die("In displayFileContentAction");


    }

答案 3 :(得分:0)

当您调用$this->_forward('displayFileContent')时,您将浏览Zend Framework的路由堆栈。然后路由搜索不存在的displayfilecontent操作(url不区分大小写)。

要访问该网址,您需要转发$this->_forward('display-file-content'),使用破折号代替驼峰案例。

然后,您需要创建名为display-file-content.phtml的视图文件或禁用此操作的视图呈现