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 intereste开发者_如何学编程d 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']);
精彩评论