Zend Framework _forward не работает - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь использовать $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 ]

3 голосов
/ 29 марта 2012

Почему вы пересылаете?просто выполните код, замените

$this->_forward('displayFileContent');

на

return $this->displayFileContentAction();
1 голос
/ 29 марта 2012

Ваш код должен быть:

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(); .
0 голосов
/ 29 марта 2012

Когда вы вызываете $this->_forward('displayFileContent'), вы проходите через стек маршрутизации Zend Framework. Затем при маршрутизации выполняется поиск действия displayfilecontent, которого не существует (в URL не учитывается регистр).

Чтобы достичь этого URL, вам нужно переадресовать на $this->_forward('display-file-content'), используя тире вместо верблюжьего чемодана.

Затем вам нужно будет создать файл вида с именем display-file-content.phtml или отключить рендеринг вида для этого действия

0 голосов
/ 29 марта 2012

Почему бы вам не попробовать

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

//Your action 

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


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...