CI框架3.x 之實現前后端分離


一、建立合理的目錄結構

  

admin與home為后台和前台的控制器和模板文件夾

二、定義前后台視圖路徑常量

在constants.php中添加如下代碼:

//定義前台視圖路徑常量
define('HOME_VIEW_DIR', 'views/home/');
//定義后台視圖路徑常量
define('ADMIN_VIEW_DIR', 'views/admin/');

三、創建擴展加載器

在core文件夾中創建MY_Loader.php,代碼如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/2/16 0016
 * Time: 下午 1:31
 */
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Loader extends CI_Loader
{
    /**
     * @Description: 設置前台模板頁面路徑
     * @Author: Yang
     */
    public function set_home_view_dir()
    {
        $this->_ci_view_paths = array(APPPATH . HOME_VIEW_DIR => TRUE);
    }

    /**
     * @Description: 設置后台模板頁面路徑
     * @Author: Yang
     */
    public function set_admin_view_dir()
    {
        $this -> _ci_view_paths = array(APPPATH . ADMIN_VIEW_DIR => TRUE);
    }
}

四、創建前台控制器

在home文件夾中添加index.php文件,代碼如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/2/16 0016
 * Time: 下午 1:25
 */
defined('BASEPATH') OR exit('No direct script access allowed');

class Index extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->set_home_view_dir();
    }

    public function index()
    {
        $this->load->view("home.html");
    }
}

訪問前台結果如下圖所示:

五、創建后台控制器

在admin文件夾中添加index.php,代碼如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/2/16 0016
 * Time: 下午 1:25
 */
defined('BASEPATH') OR exit('No direct script access allowed');

class Index extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->set_admin_view_dir();
    }

    public function index()
    {
        $this->load->view("admin.html");
    }
}

訪問后台結果如下圖所示:

 

 六、解決默認控制器default_controller為目錄/Controller名

打開system\core目錄下的Router.php, 大概在298行

注釋下段代碼

// Is the method being specified?
        if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2)
        {
            $method = 'index';
        }

新增以下代碼

$index = strripos($this->default_controller, '/');  // 記錄 符號‘/’的下標
        if($index == false){
            $class = $this->default_controller; // 沒有‘/’ 的可以直接賦值
        }else{
            $this->directory = substr($this->default_controller, 0, $index + 1); //目錄的字符串
            $class  = substr($this->default_controller, $index + 1);  //類的字符串
        }
        $method = $this->method;  //默認方法

如果是 '路徑/類名' ,以上的配置就夠了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM