Zend: rediriger vers L'Action avec les paramètres
j'utilise Zend framework. J'utilise l'énoncé suivant pour rediriger vers une autre action.
$this->_helper->redirector('some_action');
déclaration ci-Dessus fonctionne parfaitement et 'some_action' est appelé. Maintenant je veux passer quelques paramètres à' some_action ' comme ceci.
some_action?uname=username&umail=username@example.com
Et comment obtenir les paramètres en appelle à l'action. Habituellement nous faire comme ceci:
$userName = $_REQUEST['uname'];
$usermail = $_REQUEST['umail'];
Comment faire cela? Exemple de code s'il vous plaît. Merci
5 réponses
Zend_Controller_Action::redirect()
méthode (qui vient de traverse pour Sarfraz l'aide de la méthode)
$this->redirect('/module/controller/action/username/robin/email/robin@example.com');
Remarque: _redirect()
la méthode est dépréciée à partir de Zend Framework 1.7. Utilisez redirect()
à la place.
puis, dans l'action demandée:
$username = $this->_getParam('username');
$email = $this->_getParam('email');
_getParam() prend un deuxième argument optionnel qui est la variable par défaut si le paramètre n'est pas trouvé.
vous pouvez essayer avec redirecteur:
$params = array('user' => $user, 'mail' => $mail);
$this->_helper->redirector($action, $controller, $module, $params);
Vous pouvez essayer ceci:
$this->_redirector->gotoUrl('/my-controller/my-action/param1/test/param2/test2');
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');
}
}
j'ai oublié de mentionner, bien sûr cela suppose que vous avez la configuration de routage pour accepter un $param. Par exemple, le routage ressemblerait à ceci pour la page qui est redirigée dans l'exemple ci-dessus:
/ 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
comment vous obtenez la param sorta dépend de l'endroit où vous êtes,
Vous n'avez pas à attraper une demande $param pour atteindre ce que vous voulez faire ici. Vous utilisez simplement le helper FlashMessenger pour ajouter un message à la pile. Vous récupérez alors le message dans l'action où vous voulez montrer le message, puis l'assignez à la vue comme je le fais dans l'action de succès. Gardez à l'esprit que vous pouvez passer n'importe quel $var ou d'une matrice de données en l'affectant dans le contrôleur comme: $this->view->var = $var; Dans la vue qui sera alors accessible sous $this->var.
puisque vous avez demandé à propos de login je vais vous montrer comment je le fais habituellement. Pas que c'est la meilleure façon.
Mon LoginController l'index de l'avis de la forme:
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.';
}
}
}
}
Dans la réussite de l'action-nous faire ceci:
public function successAction() {
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
$this->view->messages = $this->_helper
->getHelper('FlashMessenger')
->getMessages();
} else {
$this->_redirect('/login/success');
}
}
Dans le script de vue, nous pouvons faire quelque chose comme ce que j'ai ci-dessous. La raison pour laquelle je le fais de cette façon est que parfois je passerai seulement un seul message dans un contrôleur, dans ce cas je utilisez simplement:
$this->view->message = 'message goes here';
Puis prendre les deux si ils sont définis dans la vue:
<?php
if(isset($this->message) || isset($this->messages)):
?>
<?php
if(is_array($this->messages))
{
echo implode($this->messages);
} else {
echo $this->message;
}?>
<?php
endif
?>