Sie können auch $params sagen wie für Benutzer-ID hinzufügen
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');
}
}
Ich habe vergessen zu erwähnen, dass dies natürlich davon ausgeht, dass Sie das Routing-Setup haben, um einen $param zu akzeptieren. Als Beispiel würde das Routing für die Seite, auf die im obigen Beispiel umgeleitet wird, in etwa so aussehen:
Wie Sie die Param sorta erhalten, hängt davon ab, wo Sie sich befinden.
Sie müssen keine Anfrage $param abfangen, um das zu erreichen, was Sie hier tun möchten. Sie verwenden lediglich den FlashMessenger-Helfer, um dem Stack eine Nachricht hinzuzufügen. Sie rufen dann die Nachricht innerhalb der Aktion ab, in der Sie die Nachricht anzeigen möchten, und weisen sie dann der Ansicht zu, wie ich es in der successAction mache. Denken Sie daran, dass Sie jede $var oder jedes Array von Daten übergeben können, indem Sie es im Controller wie folgt zuweisen: $this->view->var = $var; Innerhalb der Ansicht, auf die dann als $this->var zugegriffen wird.
Da Sie nach dem Login gefragt haben, zeige ich Ihnen, wie ich es normalerweise mache. Nicht, dass es der beste Weg wäre.
Die Indexansicht von My LoginController enthält das Formular:
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.";
}
}
}
}
In der Erfolgsaktion machen wir das:
public function successAction() {
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
$this->view->messages = $this->_helper
->getHelper('FlashMessenger')
->getMessages();
} else {
$this->_redirect('/login/success');
}
}
Im Ansichtsskript können wir so etwas wie das tun, was ich unten habe. Der Grund, warum ich das so mache, ist, dass ich manchmal nur eine einzige Nachricht in einem Controller übergebe, in diesem Fall verwende ich einfach:
$this->view->message="message goes here";
Fangen Sie dann beide ab, wenn sie in der Ansicht festgelegt sind: