【问题标题】:Managing views in CodeIgniter在 CodeIgniter 中管理视图
【发布时间】:2016-11-12 11:29:32
【问题描述】:

我想为管理员和用户创建不同的视图。我创建了一个名为 members 的页面,该页面将在用户成功登录后显示。但是如何为管理员创建另一个视图。
这是我的控制器:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Project extends CI_Controller {


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

public function members()
{


    $this->load->view('members');

}
 public function singup()
{
    $this->load->view('singup');
}
public function login()
{
    $this->load->view('login');
}
public function login_validation()
{
 $this->load->library('form_validation');
     $this->form_validation- >set_rules('email','Email','required|trim|callback_validate_credentials');
     $this->form_validation->set_rules('password','Password','required|md5');
    if($this->form_validation->run())
{
$this->load->view('members');

}else{
$this->load->view('login'); 
 }
 }

 function validate_credentials()
 {
 $this->load->model('Project_users');
 if($this->Project_users->can_login_in())
 {
 return true;
 }
 else
 {
  $this->form_validation->set_message('validate_credentials','incorrect username/password');
 return false;
 }
 }
 public function singup_validation()
 {
 $this->load->library('form_validation');
     $this->form_validation->set_rules('email','Email','required|trim|valid_email|is_unique[users.email]');
     $this->form_validation->set_rules('password','Password','required');
     $this->form_validation->set_rules('cpassword','Confrim Password','required|matches[password]');
      $this->form_validation->set_message('is_unique',"this email is already registed");
     if($this->form_validation->run())
  {
  $this->load->model('project_users');      
  $this->project_users->add_temp_user();
  }else{
  echo "please singup";
  $this->load->view('singup');
  }
  }
  }

login_validation 成功后,用户将被移动到会员页面。同样,如果管理员登录,他应该被移动到管理页面。

这是我的模型。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Project_users extends CI_Model {
function can_login_in()
{
     $this->db->where('email',$this->input->post('email'));
     $this->db->where('password',md5($this->input->post('password')));

    $query = $this->db->get('users');
    if($query->num_rows() == 1){

        return true;
    }else{
        return false;
    }
    }


    public function add_temp_user()
    {
     $data=array('email'=>$this->input- >post('email'),'password'=>md5($this->input->post('password')));
      $query=$this->db->insert('users',$data);
   if($query){
    echo "inserted";
     }
     else{
         echo "colud not add to db";
         }
         }

         }

我对 mvc 和 codeigniter 很陌生

【问题讨论】:

  • 你想要什么?...请解释一下...
  • 我想在管理员登录时创建另一个视图。例如,当管理员登录时,我应该将他重定向到管理页面。用户到成员页面@NikhilVaghela
  • 如果你是 mvc 新手,请选择像 Laravel 这样的现代框架
  • @schellingerht 我不想告诉你这个问题,但是 Laravel 和 CodeIgniter 都与 MVC 无关。
  • @tereško 你是完全正确的......但你知道我的意思是:一个支持 MVC 的框架。

标签: php codeigniter


【解决方案1】:

我不知道这是否是你想要的,但只是为了创建另一个视图,只需创建其他登录方法,然后加载新视图。

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

public function admingloginvalidation()
{

    $this->load->library('form_validation');
    $this->form_validation->set_rules('email','Email','required|trim|callback_validate_credentials');
    $this->form_validation->set_rules('password','Password','required|md5');
    if ($this->form_validation->run()) {

        $this->load->view('adminmembers');

    } else {

        $this->load->view('adminlogin'); 

    }
}

然后只需将浏览器指向 project/adminlogin,或者您可以为管理员创建一个新的控制器/视图。

【讨论】:

    【解决方案2】:

    我认为您应该为此任务创建单独的控制器功能。请看示例:

    Auth.php // 控制器

    class Auth extends CI_Controller {
    
      public function __construct() {
        parent::__construct();
        $this->load->model('Auth_model');
      }
    
      public function login() {
        $this->load->view('login'); //name of your view
      }
    
      public function check() {
        $this->form_validation->set_rules('username', 'username', 'required');
        $this->form_validation->set_rules('password', 'password', 'required');
    
        if ($this->form_validation->run() == false) {
          $this->login();
        }
        else {
          $this->Auth_model->check();
        }
      }
    }
    

    Auth_model.php // 模型

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Auth_model extends CI_Model {
    
      public function check() {
        // put your login check codes here and if it success, redirect to home (e.g. 'redirect("home")') and don't forget to define a session which includes type and logged keys. 
      }
    }
    

    Home.php // 控制器

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Home extends Logged_Controller {
    
      public function home() {
       if ($this->session->userdata('type') == 'admin') {
        $this->load->view('admin');
       }
       elseif ($this->session->userdata('type') == 'user') {
        $this->load->view('user');
       }
       else {
        redirect('login');
       }
      }
    }
    

    您应该在application/core 文件夹下创建一个名为MY_Controller.php 的文件来验证登录用户。

        <?php
        defined('BASEPATH') OR exit('No direct script access allowed');
    
        class Logged_Controller extends CI_Controller {
          public function __construct() {
            parent::__construct();
            if (!$this->session->userdata('logged')) {
              $this->session->set_flashdata('danger', 'Please login!');
              redirect('login');
          }
        }
      }
    

    在这段代码中,我使用会话进行了登录验证。如果您看到 MY_Controller 文件,您应该定义一个名为“logged”的会话变量,其值为 true。您可以根据需要对其进行修改。

    如果您使用这种结构,您可以轻松地将管理员视图和用户视图分开。请不要忘记添加名为“type”和“logged”(或其他名称)的会话密钥。

    如果您有任何问题,请随时提出。

    【讨论】:

    • 我想在codeigniter中显示我的系统信息,例如ip地址、内存、硬盘等。你能帮我吗?@Deniz b.
    • @sumanthreddy ip 很简单,使用 $this->input->ip_address();但对于其他人,您应该看到官方 PHP 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多