2012-03-29 6 views
0

Я пытаюсь использовать $this->_forward(), чтобы перейти к другому действию в том же контроллере, но он не работает. Мой код ...Zend Framework _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'.

Любая помощь будет принята с благодарностью, поскольку у меня были настоящие проблемы с этим.

+0

camelcase в действии просто все испортит. – RockyFord

ответ

3

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

$this->_forward('displayFileContent'); 

с

return $this->displayFileContentAction(); 
+0

Отображает представление действий индекса, а не представление вида displayFileContent. – user1300814

0

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

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

//Your action 

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


    } 
+0

Я пробовал $ this -> _ redirect ('/ Index/displayFileContent'); но он просто возвращается с ошибкой, заявив, что запрошенный URL не найден на этом сервере. – user1300814

0

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

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

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

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(); .