Php Zend:重定向到带有参数的操作
我正在使用zend框架。我使用下面的语句重定向到另一个操作Php Zend:重定向到带有参数的操作,php,zend-framework,redirect,Php,Zend Framework,Redirect,我正在使用zend框架。我使用下面的语句重定向到另一个操作 $this->_helper->redirector('some_action'); 上述声明运行良好,称为“一些行动”。现在我想把一些参数传递给像这样的“some_action” some_action?uname=username&umail=username@example.com 以及如何在调用的操作中获取参数。通常我们会这样做: $userName = $_REQUEST['uname']; $user
$this->_helper->redirector('some_action');
上述声明运行良好,称为“一些行动”。现在我想把一些参数传递给像这样的“some_action”
some_action?uname=username&umail=username@example.com
以及如何在调用的操作中获取参数。通常我们会这样做:
$userName = $_REQUEST['uname'];
$usermail = $_REQUEST['umail'];
如何执行此操作?示例代码请。谢谢您可能想试试这个:
$this->_redirector->gotoUrl('/my-controller/my-action/param1/test/param2/test2');
使用
Zend\u Controller\u Action::redirect()
方法(只传递给Sarfraz的helper方法)
注意:\u redirect()
方法从Zend Framework 1.7开始就不推荐使用。改用redirect()
然后在所谓的行动中:
$username = $this->_getParam('username');
$email = $this->_getParam('email');
_getParam()接受第二个可选参数,如果找不到该参数,则将该参数设置为该变量的默认值。您可以尝试使用重定向器:
$params = array('user' => $user, 'mail' => $mail);
$this->_helper->redirector($action, $controller, $module, $params);
您还可以为userid添加$params,比如like
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');
}
}
我忘了提到,当然这是假设您有接受$param的路由设置。例如,对于上例中被重定向到的页面,路由如下所示:
/应用程序/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
如何获得参数排序取决于您在哪里 您不必捕获$param请求,就可以在这里实现您想要做的事情。您只是在使用FlashMessenger帮助程序将消息添加到堆栈中。然后在要显示消息的操作中检索消息,然后将其分配给视图,就像我在successAction中所做的那样。请记住,您可以通过在控制器中分配任何$var或数据数组来传递它,如:$this->view->var=$var;在视图中,该视图将作为$this->var访问 既然你问了关于登录的问题,我会告诉你我通常是怎么做的。这不是最好的办法 My LoginController的索引视图包含以下格式:
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.';
}
}
}
}
在成功行动中,我们做到了以下几点:
public function successAction() {
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
$this->view->messages = $this->_helper
->getHelper('FlashMessenger')
->getMessages();
} else {
$this->_redirect('/login/success');
}
}
在视图脚本中,我们可以执行下面的操作。我这样做的原因是,有时我只会在控制器中传递一条消息,在这种情况下,我只使用:
$this->view->message = 'message goes here';
如果在视图中设置了它们,则捕捉它们:
<?php
if(isset($this->message) || isset($this->messages)):
?>
<?php
if(is_array($this->messages))
{
echo implode($this->messages);
} else {
echo $this->message;
}?>
<?php
endif
?>
到达那里后,如何检索$params?
<?php
if(isset($this->message) || isset($this->messages)):
?>
<?php
if(is_array($this->messages))
{
echo implode($this->messages);
} else {
echo $this->message;
}?>
<?php
endif
?>