php - Zend: redirigir a la acción con parámetros
zend-framework redirect (5)
Cómo se obtiene el param sorta depende de dónde se encuentre,
No tiene que atrapar un $ param de solicitud para lograr lo que quiere hacer aquí. Solo está usando el asistente de FlashMessenger para agregar un mensaje a la pila. A continuación, recupera el mensaje dentro de la acción en la que desea mostrar el mensaje, y luego lo asigna a la vista como lo hago en la acción successAction. Tenga en cuenta que puede pasar cualquier $ var o matriz de datos asignándolos en el controlador como: $ this-> view-> var = $ var; Dentro de la vista que se accederá como $ this-> var.
Como preguntaste sobre el inicio de sesión, te mostraré cómo suelo hacerlo. No es la mejor manera.
La vista de índice de mi LoginController tiene la forma:
public function indexAction() {
$form = new Zfcms_Form_Login;
$this->view->form = $form;
/*check for valid input
authenticate using adapter
persist user record to session
redirect to original request URL if present*/
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$values = $form->getValues();
$authAdapter = $this->getAuthAdapter();
# get the username and password from the form
$username = $values[''username''];
$password = $values[''password''];
# pass to the adapter the submitted username and password
$authAdapter->setIdentity($username)
->setCredential($password);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
# all info about this user from the login table
# ommit only the password, we don''t need that
$userInfo = $authAdapter->getResultRowObject(null, ''password'');
# the default storage is a session with namespace Zend_Auth
$authStorage = $auth->getStorage();
$authStorage->write($userInfo);
$session = new Zend_Session_Namespace(''zfcms.auth'');
if (isset($session->requestURL)) {
$url = $session->requestURL;
unset($session->requestURL);
$this->_redirect($url);
} else {
$this->_helper->getHelper(''FlashMessenger'')
->addMessage(''You were successfully logged in as '' . $userInfo->username);
$this->_redirect(''/login/success'');
}
} else {
$this->view->message = ''You could not be logged in. Please try again.'';
}
}
}
}
En la acción de éxito hacemos esto:
public function successAction() {
if ($this->_helper->getHelper(''FlashMessenger'')->getMessages()) {
$this->view->messages = $this->_helper
->getHelper(''FlashMessenger'')
->getMessages();
} else {
$this->_redirect(''/login/success'');
}
}
En el script de vista podemos hacer algo como lo que tengo a continuación. La razón por la que lo hago de esta manera es que a veces paso solo un mensaje en un controlador, en este caso simplemente uso:
$this->view->message = ''message goes here'';
Luego, captúrelos si están configurados en la vista:
<?php
if(isset($this->message) || isset($this->messages)):
?>
<?php
if(is_array($this->messages))
{
echo implode($this->messages);
} else {
echo $this->message;
}?>
<?php
endif
?>
Estoy usando zend framework. Estoy usando la siguiente declaración para redirigir a otra acción.
$this->_helper->redirector(''some_action'');
La declaración de arriba está funcionando perfectamente y se llama ''some_action''. Ahora quiero pasar algunos parámetros a ''some_action'' como este.
some_action?uname=username&[email protected]
Y cómo obtener parámetros en la acción llamada. Por lo general, nos gusta esto:
$userName = $_REQUEST[''uname''];
$usermail = $_REQUEST[''umail''];
¿Cómo hacer esto? Código de ejemplo por favor. Gracias
Es posible que desee probar esto:
$this->_redirector->gotoUrl(''/my-controller/my-action/param1/test/param2/test2'');
También puede agregar $ params decir como ID de usuario
public function indexAction ()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
// Identity exists; get it
$identity = $auth->getIdentity();
$this->_redirect(''/user/profile/'' . $identity->user_id);
} else {
$this->_redirect(''/user'');
}
}
Me olvidé de mencionar, por supuesto, esto es suponiendo que tienes la configuración de enrutamiento para aceptar un $ param. Como ejemplo, el enrutamiento se parecería a esto para la página a la que se redirecciona en el ejemplo anterior:
/application/configs/application.ini
resources.router.routes.user-profile.route = /user/profile/:id
resources.router.routes.user-profile.defaults.module = default
resources.router.routes.user-profile.defaults.controller = user
resources.router.routes.user-profile.defaults.action = profile
Utilice el método Zend_Controller_Action::redirect()
(que simplemente pasa al método de ayuda de Sarfraz)
$this->redirect(''/module/controller/action/username/robin/email/[email protected]'');
Nota: el método _redirect()
está en desuso a partir de Zend Framework 1.7. Use redirect()
lugar.
Y luego en la acción llamada:
$username = $this->_getParam(''username'');
$email = $this->_getParam(''email'');
_getParam () toma un segundo argumento opcional que se establece en la variable como valor predeterminado si el parámetro no se encuentra.
puedes probar con el redirector:
$params = array(''user'' => $user, ''mail'' => $mail);
$this->_helper->redirector($action, $controller, $module, $params);