返回redirect()没有将我带到所需的方法

时间:2019-04-21 04:01:53

标签: php codeigniter-3

我正在CodeIgniter 3中建立博客。我想在用户通过身份验证但redirect()无法正常工作时从一个控制器重定向到另一个控制器。

我已经尝试了Stack Overflow中给出的所有解决方案,但是没有人适合我。检查我的代码,并告诉我问题出在哪里。预先感谢。

MY_Controller是我从CI_Controller扩展的核心控制器。

Login_c.php

class Login_c extends MY_controller {

    public function index() {
        $this->load->helper('form');
        $this->load->view('public/admin_login_v');
    }

    public function admin_login() {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'User name', 'required|trim|alpha');
        $this->form_validation->set_rules('password', 'Password' , 'required');

        if($this->form_validation->run()) {
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $this->load->model('login_model');
            $login_id = $this->login_model->login_valid($username,$password);

            if( $login_id ){
                $this->session->set_userdata('user_id', $login_id);
                return redirect('admin_c/dashboard');

            } else {
                echo "user not authenticated";
            }
        } else {
            $this->load->view('public/admin_login_v');
            // echo validation_errors();
        }
    }
}

admin_c.php

<?php
// ob_start();

class Admin_c extends MY_Controller {
    public function dashboard() {
        $this->load->view('public/admin_dashboard');
    }
}

config.php

$config['base_url'] = "http://localhost/ci_blog";

错误

  

HTTP 500内部服务器错误

3 个答案:

答案 0 :(得分:0)

可能有很多原因。 首先,您可以使用显示错误来诊断问题

如果您放下

error_reporting(E_ALL);
ini_set("display_errors", 1);

在文档顶部,然后在浏览器中运行它,这可能返回其无法正常工作的原因。

对于redirect()函数本身,您是否看过它需要什么参数? 我喜欢使用称为PHPStorm的软件,您可以免费试用它,在定义一个函数时,它将告诉您该函数需要哪些参数以及以什么顺序排列。非常有帮助。

如果这没有帮助,那么我想使用重定向功能,您可以将其放入文档中并回调至所需位置

$site_prefix = 'http'; //This could equal http or https depending on your ssl
$site_url = $_SERVER['HTTP_HOST']; //You could replace $_SERVER['HTTP_HOST'] with your actual hostname like 'example.com'

    function redirect_to($page){

            global $site_prefix;
            global $site_url;

            if($page == 'home'){
                header("Location: {$site_prefix}://{$site_url}/");
            }
            elseif($page == ''){
                header("Location: {$site_prefix}://{$site_url}");
            }
            else{
                header("Location: {$site_prefix}://{$site_url}/{$page}");
            }
        }

然后您可以像这样

调用此函数
redirect_to('admin/dashboard.php');

或者,如果您使用的是漂亮的网址

redirect_to('admin/dashboard');

我喜欢在函数中使用全局变量而不是使用site_url变量,因为我倾向于在整个站点中使用它们。

如果情况变得更糟,您始终可以使用以下方式运行PHP重定向

header("Location: http://example.com/mypage.php");

我知道这已经缠绵了很长一段时间,但我希望它会有所帮助

答案 1 :(得分:0)

您必须使用

  redirect('admin/dashboard.php','refresh');

答案 2 :(得分:0)

在构造函数中加载会话库。

您的代码就像

class Login_c extends MY_controller {


public function index() {
    $this->load->helper('form');
    $this->load->view('public/admin_login_v');
}

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

public function admin_login() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'User name', 'required|trim|alpha');
    $this->form_validation->set_rules('password', 'Password' , 'required');

    if($this->form_validation->run()) {
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $this->load->model('login_model');
        $login_id = $this->login_model->login_valid($username,$password);

        if( $login_id ){
            $this->session->set_userdata('user_id', $login_id);
            return redirect('admin_c/dashboard');

        } else {
            echo "user not authenticated";
        }
    } else {
        $this->load->view('public/admin_login_v');
        // echo validation_errors();
    }
}

}

**在使用redirect()之前请勿进行任何打印**