$ this-> request-> referer()在cakephp 3.2中无法使用电子邮件链接

时间:2016-05-30 08:09:18

标签: cakephp cakephp-3.0 cakephp-3.2

我正在做一个cakephp项目。 我被困在这里。 我想在cakephp 3.2中获取前一个url,但它不起作用。 这里的链接存在于电子邮件中,点击该链接后我将重定向到登录页面,登录后,我将重定向到之前的URL,表示仅存在于邮件中的URL。 我写了下面的代码来做。

Session session = (Session) entityManager.getDelegate();
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) session.getSessionFactory();
Dialect dialect = sessionFactory.getDialect();
if (dialect.toString().contains("Oracle")) { ... }

Plesae建议我。 任何建议都会非常感激。 谢谢。

2 个答案:

答案 0 :(得分:3)

Cakephp提供了将用户重定向回他们来源的功能。

AuthComponent::redirectUrl()

登录后将它们重定向到redirectUrl,如下所示 $this->redirect($this->Auth->redirectUrl())

有关详细信息,请访问here

答案 1 :(得分:1)

首先在AppController.php中。在beforeFilter函数中存储会话中的前一个URL

public function beforeFilter(){
  $url = Router::url(NULL, true); //complete url
  if (!preg_match('/login|logout/i', $url)){ // Restrict login and logout actions
    $this->Session->write('prevUrl', $url);
  }
}

使用您需要重定向的位置

if ($this->Session->read('prevUrl')){
$this->redirect($this->Session->read('prevUrl'));
exit;
}

这正在cakephp 2.6中改变cakephp 3中的beforeFilter函数

public function beforeFilter(\Cake\Event\Event $event){
  $url = Router::url(NULL, true); //complete url
if (!preg_match('/login|logout/i', $url)){ // Restrict login and logout actions
    $session = $this->request->session();
    $session->write('prevUrl', $url);
 }
}

使用您需要重定向的位置

$session = $this->request->session();
if($session->read('prevUrl')){
   $this->redirect($session->read('prevUrl'));
   exit;
}