【问题标题】:Codeigniter redirect not working in __construct methodCodeigniter 重定向在 __construct 方法中不起作用
【发布时间】:2019-10-30 13:59:18
【问题描述】:

我正在检查用户是否在构造方法中登录,如果没有登录则重定向到登录方法但它正在无限循环。登录方法在同一个控制器中定义。

问题: 1)为了测试目的,我在'Welcome'控制器中编写了相同的(登录)方法,在这种情况下它工作正常并完美重定向,之后我在'Welcome'控制器中注释了方法,现在登录方法在用户控制器中未注释它不工作

class User extends CI_Controller {

    function __construct() {
        parent::__construct();

        is_logged_in();   // defined in custom helper
        if (!is_logged_in()) {
        redirect(base_url().'User/Login');

        }
    }

    public function login(){

      $this->load->view('loginpage');
    }

}


//code in custom helper

function is_logged_in() {
    $CI =& get_instance();
  $user = $CI->session->userdata('id');
  if (!isset($user)) { 
   return false; 
  } 
 else { 
   return true;
 }
} 

【问题讨论】:

  • 确保在配置文件中添加 url helper。

标签: php codeigniter


【解决方案1】:

如果你的助手返回 false 你的代码永远不会到达控制器的登录函数,它总是通过构造函数传递,它会重定向等等......

改变这个:

    if (!is_logged_in()) {
      $this->login();
    }

现在它调用登录函数,如果不是logged_in(),否则继续控制器的index()函数

【讨论】:

  • 显示你的助手,什么方法不起作用?我在控制器的构造函数中快速检查了它并确保它可以正常工作
【解决方案2】:

请在控制器中使用助手。

class User extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->helper('name');
     $checkLogin = $this->helperName->is_logged_in();   // defined in custom helper
    if (!$checkLogin) {
    redirect(base_url().'User/Login');

    }
}

【讨论】:

  • 收到错误未定义属性:User::$Check_loggedIn_helper
【解决方案3】:

我猜你会自动加载你的助手。 也许你的辅助函数需要改变

function is_logged_in() {
     $CI =& get_instance();
     $user = $CI->session->userdata('id');
     if (!isset($user) || is_null($user)|| empty($user)) { 
         return false; 
      }else { 
         return true;
      }
    }  

【讨论】:

  • 即使我在构造中声明了助手仍然是同样的问题,即没有重定向
【解决方案4】:

试试这个方法。这工作正常。

控制器

function __construct(){
    parent::__construct();
    if(!is_login()){
       redirect(site_url().'/User/login');
    }
}

助手

function is_login(){
    //Your Logic
    return false;
}

autoload.php

$autoload['helper'] = array('your_helper_class_name');

【讨论】:

  • 确保你的助手加载到 config->autoload.php $autoload['helper'] = array('your_helper_class_name');
猜你喜欢
  • 2015-02-28
  • 2020-11-12
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多