【问题标题】:Codeigniter: Controller function name shows in url, how change to view file name?Codeigniter:控制器函数名称显示在 url 中,如何更改查看文件名?
【发布时间】:2012-08-28 09:06:08
【问题描述】:

想知道是否有人可以指导我找出我做错了什么(或需要做什么)并认为问题出在我的路线文件中。当用户显示登录表单时,例如他们在提交 url 后输入错误的用户名,显示为:http://localhost:8888/codeigniter/login/login_validation。当成功并登录到管理区域(从数据库中提取新闻文章)时,仍会显示此 URL。我想知道是否有办法到达http://localhost:8888/codeigniter/news. 我查看了我的路线文件夹,我尝试使用“通配符”但没有成功。这是我的参考代码,需要的任何其他信息或文件让我知道!谢谢。

控制器:

  class Login extends CI_Controller {

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

    }

        public function index() {
            $this->load->view('login');
    }


    //Validate login area
    public function login_validation() {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_username_check');
        $this->form_validation->set_rules('password', 'Password', 'required|xss_clean|callback_password_check');

          if($this->form_validation->run() == FALSE) {
             //Field validation failed.  User redirected to login page
             $this->index();

             }else{
                 $this->load->model('user_model');
                 $query = $this->user_model->login_details();

                 // if the user's credentials validated...
                if($query) {
                    $data = array(
                        'username' => $this->input->post('username'),
                        'is_logged_in' => true
                    );

                    $this->session->set_userdata($data);
                    redirect('news');

                }else{
                 $data['error'] ="Invalid Username or Password";
                 $this->load->view('login',$data);  
                }

            }
    }

            function logout() {
       $this->session->sess_destroy();
       $this->index();
}

}

user_model.php 中的 login_details 函数

           function login_details() {
        $this->db->where('username', $this->input->post('username'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('login');

        if($query->num_rows == 1){
            return true;
        }
    }       

【问题讨论】:

    标签: codeigniter url controller routes


    【解决方案1】:

    如果您要登录任何类型的系统,您将需要使用 CodeIgniter 的 Session 类来存储会话。如果存在controllers/news.php,您可以设置会话并立即使用redirect('news'); 执行重定向。不需要$this->load->view(),因为这个逻辑无论如何都会在news.php的索引中,而且你会复制代码。

    我不确定$this->user_model->login_details() 会返回什么,但我假设falsenull 因为您说CodeIgniter 将您送回login 视图。进入login_details() 函数并确保一切正常(您可能也想发布它)。另外,如果您进行了更改,请为我们发布您的 routes.php 文件以防万一。

    附带说明:空格是有效的密码字符,不要trim 它,否则密码中带有前导或尾随空格的人将无法进入;)

    【讨论】:

    • 根据您的建议,将网址更改为/codeigniter/news。现在出现了一个 codeigniter 错误,显示“找不到您请求的页面”。 news.php 也与所有其他文件在同一个文件中。在您提出建议后,我将编辑我上面的代码,向您展示更正的代码,看看我是如何更改的。感谢您对修剪密码错误的提醒,我实际上是从教程中采用该方法的,所以我会确保查看用户指南下次仔细!我还将发布我的 login_details 函数,以便您可以看到它拉入控制器的内容。
    • 我还有表单、url、会话和数据库目前正在自动加载,我的路线是。只需 $route['news'] = "news";在配置文件中,基本 url 设置为 localhost 和文件名(适用于其他文件)。
    • 已修复:我在两个控制器中复制了一个功能。再次感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多