2010-01-12 9 views
1

Какой рекомендуемый метод перенаправления с переменными в Zend Framework?Перенаправление URL с переменной в Zend Framework

Допустим, у нас есть действие, как это в контроллере:

public function newAction() 
    { 
     $form = new Form_ApplicationForm(); 
     if($this->_request->isPost()){ 
      $data = $_POST; 
      if($form->isValid($data)){ 
       $appModel = new Model_Application(); 
       $result = $appModel->createApplication($form->getValue('name'), 
        $form->getValue('email'), 
        $form->getValue('comments')); 
       if($result){ 
        // redirect here 
       } 
      }else{ 
       $form->populate($data); 
      } 
     } 
     $this->view->form = $form; 
    } 

Если я хотел, чтобы перенаправить на URL, где я мог бы показать что-то вроде:

«Спасибо за ваше приложение, ваш ссылка # 123 "

Как мне выполнить эту переадресацию?

что-то вроде этого может быть?

$this->_redirect('/application/confirm/'.$result); 

Если да, то как я могу получить доступ к $result var?

EDIT ИЛИ Я думаю, это будет работать:

$this->_redirect('/application/confirm/?id='.$result); 

.. но я не уверен, если это лучшая практика или нет?

Я видел примеры, когда люди используют _forward() для переадресации, но URL не меняется, что создает проблемы с несколькими представлениями и т.д.

Я видел кто-то порекомендовать gotoSimple(), но я не уверен в этом. Тем не менее, ZF noob так извиняется, если это очевидно, но я думаю, что это то, что много раз использует системы типов CRUD, поэтому было бы интересно узнать.

Благодаря

ответ

7

Много вариантов. Контроллер $this->_redirect() делегирует работу Zend_Controller_Action_Helper_Redirector. Проверьте его documentation для всех вариантов и выберите тот, который вам нравится. Простейшие способы, не связанные пользовательские маршруты:

$this->_redirect('/controller/action/param1/value1/param2/value2'); 

или

$this->_redirect(
    '/controller/action', 
    array('param1' => 'value1', 'param2' => 'value2') 
); 

Вы правы в обращать внимание на разницу между _redirect и _forward. Пересылка означает просто повторную маршрутизацию исходного запроса, в то время как _redirect действительно вызывает перенаправление HTTP.

+0

спасибо за информацию, я не уверен, хотя в первом примере, как можно получить параметры param1 и param2, поскольку они нигде в $ _REQUEST? – robjmills

+1

Я вижу его доступным через $ this -> _ request-> getParam ('param1'), это рекомендуемый метод? – robjmills

+0

Запрос getQuery ([string $ key = null], [mixed $ default = null]) возвращает членов супергелбала $ _GET. getParam также будет работать, но он возвращает больше, чем просто $ _GET. –

1

Не переусердствовать просто, но вы считали положить его в $_SESSION, а затем просто читать его на следующей странице?

Page 1:

$_SESSION['foo'] = 10; 

Page 2:

echo htmlspecialchars($_SESSION['foo']); 
+3

Не нравится использовать переменные сеанса для подобных вещей, чувствует себя слишком взломанным и означает, что он не может быть помечен в закладки. На самом деле я хочу, чтобы переменная была в URL-адресе, я думаю, я могу просто сделать что-то вроде $ this -> _ redirect ('/ application/confirm /? Foo ='.$ Результат); – robjmills

+0

Да, это хаки;) –

Смежные вопросы