简体   繁体   中英

Redirecting URL with variable in Zend Framework

Whats the recommended method for redirecting with variables in Zend Framework?

Lets say we have an action like this within a controller:

 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;
    }

If i wanted to redirect to a URL where i could show something like:

"Thanks for your application, your reference is #123"

How should i perform this redirect?

something like this maybe?

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

If so then how would i access the $result var?

EDIT OR I guess this would work:

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

.. but i'm not sure if this is best practice or not?

I've seen examples where people use _forward() for their redirects but the URL never changes which creates issues with multiple submissions etc.

I've seen someone recommend gotoSimple() but i'm not sure about this. Still a ZF noob so apologies if this is obvious but I guess this is something with multiple uses for CRUD type systems anyway so would be interested to know.

Thanks

A lot of options. Your controller's $this->_redirect() delegates the work to Zend_Controller_Action_Helper_Redirector . Check its documentation for all the options, and pick the one you like. Simplest ways not involving custom routes:

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

or

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

You're right in paying attention to the difference between _redirect and _forward . Forwarding means just re-routing the initial request, while _redirect really causes an HTTP redirect.

Not to over-simply, but have you considered putting it in $_SESSION , and then just reading it on the next page?

Page 1:

$_SESSION['foo'] = 10;

Page 2:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM