Перенаправление URL с переменной в Zend Framework - PullRequest
1 голос
/ 12 января 2010

Какой рекомендуемый метод для перенаправления с переменными в 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?

РЕДАКТИРОВАТЬ ИЛИ Я думаю, это будет работать:

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

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

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

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

Спасибо

Ответы [ 2 ]

7 голосов
/ 12 января 2010

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

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

или

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

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

1 голос
/ 12 января 2010

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

Страница 1:

$_SESSION['foo'] = 10;

Страница 2:

echo htmlspecialchars($_SESSION['foo']);
...