【问题标题】:Redirect to another controller in Codeigniter [duplicate]重定向到 Codeigniter 中的另一个控制器 [重复]
【发布时间】:2017-08-30 09:45:11
【问题描述】:

我正在使用 Codeigniter 进行项目。我陷入了控制器问题。这是我的文件夹架构:

application
 /controller
  /management
    dashboard_controller.php // Dashboard Management
  /administrator
    dashboard_controller.php // Dashboard Administrator

我尝试使用 redirect() 函数访问 dashboard_controller.php。 这是我的控制器:

...
else{
   $username = $this->input->post('username');
   $password = $this->input->post('password');

   if($this->login_model->get_user_login('$username', '$password')){
      redirect('management/dashboard_controller/index');

这是我的模型:

public function get_user_login($username, $password)
{
    $this->db->select('password');
    $this->db->from('users');
    $this->db->where('username', $username);
    $hash = $this->db->get()->row('password');
    return $this->verify_hash($password, $hash);
}

但是,它不起作用。你们能给我解释一下吗?或者 Codeigniter 路由不支持这样的配置?谢谢。

【问题讨论】:

  • redirect 需要一个 uri,如果您的路由表重新映射 www.example.com/test_a/test_a_controller,则不一定是控制器名称。 test_a/test_a_controller/index.php 是有效地址吗?
  • 意思是,sitename.com/test_a/test_a_controller 是一个有效的地址吗? =(
  • 嗨,需要检查的几件事确保您已正确命名此处解释的类和文件名 codeigniter way codeigniter.com/user_guide/general/styleguide.html#file-naming 您还可能需要在主目录中放置一个 htaccess github.com/wolfgang1983/htaccess_for_codeigniter
  • @ourmandave sitename.com/test_a/test_a_controller.php, test_a_controller.php 已经是一个文件,而不是文件夹
  • 我看到你在控制器上有单引号 ('$username', '$password') 替换它 ($username, $password)

标签: php codeigniter


【解决方案1】:

以下示例

文件名:management/Login.php

<?php

class Login extends CI_Controller {

  public function __construct() {
     parent::__construct();
     $this->load->model('login_model');
  }

  public function index() {
    $isValid = $this->login_model->get_user_login($this->input->post('username'), $this->input->post('password'))

    if ($isValid) {
      // You by default will redirect to the index function so not need index at end.
      redirect('management/dashboard_controller');

    }

  }

}

型号

public function get_user_login($username, $password)
{
    $this->db->select('password');
    $this->db->from('users');
    $this->db->where('username', $username);
    $query = $this->db->get();

    $hash = $query->row()->password;

    return $this->verify_hash($password, $hash); Make sure Returns TRUE / FALSE
}

我认为您使用 password_verify http://php.net/manual/en/function.password-verify.php

public function verify_hash($password, $hash) {
   if (password_verify($password, $hash)) {
      return TRUE;
   } else {
      return FALSE;
   }
}

当需要创建密码时使用http://php.net/manual/en/function.password-hash.php

【讨论】:

    【解决方案2】:

    这就是您需要使用 base_url 进行重定向的方式:

    redirect(base_url('management/dashboard_controller/index'));
    

    【讨论】:

      【解决方案3】:

      在 CodeIgniter 中,URL 是按以下方式构建的:

      控制器/方法/ID

      之前我还没有看到有人将控制器文件放在“controller/”的子目录中。我的猜测是,如果您尝试重定向到

      管理/dashboard_controller/索引

      其中 management 是内部目录,dashboard_controller 是控制器,index 是您可以通过以下方式完成的方法:

      header("Location:".base_url()."management/dashboard_controller");
      

      您不需要显式调用方法“index()”的原因是因为 Codeigniter 会自动为您执行此操作。如果您的控制器中有除 index() 之外的其他方法并且您尝试重定向到它,那么您必须显式键入“dashboard_controller/foo”。

      【讨论】:

        【解决方案4】:

        您应该尝试以下方法:

        redirect(base_url() . 'test_a/test_a_controller');
        

        【讨论】:

        • 应该是 base_url('url something');不是吗?是的,我已经尝试过了。它不起作用
        • 您可以同时编写 base_url() 并且两者都像@BektiGalan 一样工作
        • 根本不需要添加base_url()。它可能只是redirect('test_a/test_a_controller');
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多