php - Return redirect() 没有将我带到所需的方法

标签 php codeigniter-3

我正在使用 CodeIgniter 3 构建博客。我想在用户通过身份验证但 redirect() 不起作用时从一个 Controller 重定向到另一个 Controller 。

我已经尝试了 Stack Overflow 中提供的所有解决方案,但没有一个适合我。检查我的代码并告诉我问题出在哪里。提前致谢。

MY_Controller 是我从 CI_Controller 扩展而来的核心 Controller 。

登录_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');
    }
}

配置.php

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

错误

HTTP 500 internal server error

最佳答案

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

如果你掉了

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');

或者如果你使用漂亮的 url

redirect_to('admin/dashboard');

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

如果最坏的情况发生,您始终可以使用 PHP 重定向

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

我知道这很啰嗦,但我希望它能有所帮助

关于php - Return redirect() 没有将我带到所需的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55779775/

相关文章:

php - for 循环内的 mysql_query 给出与 mysql_fetch_assoc 相关的错误/警告

php - 如何根据页面codeigniter MVC获取特定的用户信息

php - mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 如何使用 CodeIgniter DB Forge 生成createdAt 和updatedAt 时间戳/日期时间?

mysql - 匹配用户输入的给定开始时间和结束时间是否存在

javascript - 客户端和服务器时间之间的差异

php - PHP显示来自mysql的表格错误

php - codeigniter:如何删除 URL 中的唯一索引方法

html - 如何将此 HTML 代码写入 Codeigniter 表单 Controller ?

php - Codeigniter form_validation 总是返回 false