国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CI框架網(wǎng)站前后臺目錄搭建

BaronZhang / 3396人閱讀

摘要:我的博客原文地址前臺與后臺根據(jù)功能的不同,我們將網(wǎng)站分為前臺和后臺。同樣,在網(wǎng)站應(yīng)用的編碼實現(xiàn)時,我們也需要根據(jù)前臺后臺的功能不同來進(jìn)行代碼的安排和組織。

我的博客原文地址 http://www.qinblog.net/Articl...
前臺與后臺

根據(jù)功能的不同,我們將網(wǎng)站分為前臺和后臺。前臺用于展示內(nèi)容給用戶,后臺用于管理員管理網(wǎng)站內(nèi)容。
同樣,在網(wǎng)站應(yīng)用的編碼實現(xiàn)時,我們也需要根據(jù)前臺、后臺的功能不同來進(jìn)行代碼的安排和組織。
那么,使用CodeIgniter(以3.x版本為例)搭建的網(wǎng)站,前后臺應(yīng)該怎么劃分呢?

分開前后臺的幾種方式

如果有使用過ThinkPHP的朋友,肯定會熟悉下面這張圖(TP3.2)

TP中實現(xiàn)多應(yīng)用是很簡單的,框架本省支持應(yīng)用分組,創(chuàng)建一個新的應(yīng)用只需在application中新建一個文件夾復(fù)制相關(guān)內(nèi)容即可,而且支持公有模型、配置,且支持配置文件優(yōu)先級。

比起來CI框架并不支持這樣的功能,CI提供了兩種方案給用戶解決多應(yīng)用問題:

1、創(chuàng)建子目錄

在Model、Controller等文件夾下建立子文件夾,加載相關(guān)模型、控制器時只需加上子目錄即可,如下

2、多應(yīng)用多入口

在application下建立多個應(yīng)用文件夾,每個文件夾下是一個應(yīng)用,為每個應(yīng)用創(chuàng)建入口文件,定義application路徑,如下

兩種方式的特點

1、創(chuàng)建子目錄方式: 屬于一個CI應(yīng)用,共享配置文件,無法進(jìn)行多帶帶的配置設(shè)置,比如后臺要開鉤子功能但是前臺不需要,或者前后臺需要分別加載各自的模塊時,這種搭建方式就不是那么友好了。

2、多應(yīng)用多入口: 前后臺分為多帶帶的CI應(yīng)用,可以多帶帶進(jìn)行配置,通過各自的入口文件訪問,應(yīng)用完全分離,但是無法進(jìn)行模型、自定義類庫的共享。

方案的選擇

無論選擇哪種方案,都要跟著實際需求去選擇,你的項目前后臺是否需要多帶帶的配置?是否是兩個隊伍分別開發(fā)前后臺?等等。

就以我的博客為例,我選擇了第2種方案。

那么第2種方案無法共享模型、類庫的問題怎么解決呢?同樣的數(shù)據(jù),難道我要為了前后臺寫兩份模型出來嗎?

OK,顯然CI并沒有給我們提供分組、共享模型的功能,但是CI的特點之一就是“可擴(kuò)展”,需要你自己動手做一些東西,這個框架沒那么豐富,但卻小巧、靈活,這也是CI的樂趣之一。

多入口應(yīng)用搭建 搭建目錄、設(shè)置入口文件

將application種的文件復(fù)制兩份,分別為home和admin(前后臺)

設(shè)置入口文件的 $application_folder 變量

前臺: index.php

后臺: admin.php

此時在兩個應(yīng)用中創(chuàng)建不同的welcome控制器、視圖,分別訪問index.php
,admin,php就能分別訪問到不同的應(yīng)用了。

CI框架擴(kuò)展
1、Loader.php代碼分析

CI的model、視圖、類庫等的加載都是靠核心類Loader.php完成的,代碼文路徑為system/core/Loader.php。

在Loader.php的80行左右,有如下代碼,設(shè)置了model、helper、librariy的初始尋找路徑

 /**
  * List of paths to load libraries from
  *
  * @var array
  */
 protected $_ci_library_paths = array(APPPATH, BASEPATH);

 /**
  * List of paths to load models from
  *
  * @var array
  */
  // 模型初始尋找路徑數(shù)組
 protected $_ci_model_paths = array(APPPATH);

 /**
  * List of paths to load helpers from
  *
  * @var array
  */
 protected $_ci_helper_paths = array(APPPATH, BASEPATH);

以model的加載為例,在320行左右,CI_Loader類的model方法中,讀取了$_ci_model_paths屬性,并依次讀取初(第一個元素優(yōu)先級最高)始的model路徑數(shù)組,拼接成要加載的model路徑,對model進(jìn)行加載。

// 循環(huán)路徑數(shù)組
foreach ($this->_ci_model_paths as $mod_path)
   {
   //如果不存在該路徑,繼續(xù)查找下一個路徑
    if ( ! file_exists($mod_path."models/".$path.$model.".php"))
    {
     continue;
    }

    // 加載model文件
require_once($mod_path."models/".$path.$model.".php");
    if ( ! class_exists($model, FALSE))
    {
     throw new RuntimeException($mod_path."models/".$path.$model.".php exists, but doesn"t declare class ".$model);
    }
    // 加載文件后不繼續(xù)加載其他尋找路徑中的文件
    // 尋找路徑中的優(yōu)先級:左邊最高
    break;
   }

分析代碼后我們很容易看到,只要修改$_ci_model_paths 屬性的初始值,添加一個尋找路徑(公有路徑)到尋找路徑數(shù)組的最前,就能優(yōu)先在這個路徑中尋找、加載模型了。

當(dāng)然,這里有個問題,要直接修改Loader.php源碼嗎?

NO

CI提供了核心類擴(kuò)展、替換功能,我們只需把Loader.php拷貝到home、admin兩個應(yīng)用中的core文件夾中,依次修改即可完成核心類的替換。

2、共享路徑的實現(xiàn),定義常量

要實現(xiàn)共享路徑,第一步,在application中添加一個common應(yīng)用,為model、helper等添加文件夾

第二部,入口文件index.php和admin.php中定義常量,參考CI的常量定義代碼來定義

// 公共搜索路徑
$common_path = "application/common/";

if(is_dir($common_path)){
 // 取得絕對路徑
 if (($_temp = realpath($common_path)) !== FALSE)
  {
   $common_path = $_temp;
  }
  else
  {
   $common_path = strtr(
    rtrim($common_path, "/"),
    "/",
    DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
   );
  }
 
} else {
 header("HTTP/1.1 503 Service Unavailable.", TRUE, 503);
 echo "Your common folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF;
 exit(3); // EXIT_CONFIG
}
// 定義路徑為常量
define("APP_COMMON", $common_path.DIRECTORY_SEPARATOR);

打開home、admin應(yīng)用的core/Loader.php,修改相關(guān)路徑
注意代碼優(yōu)先級,我的設(shè)置為APPPATH, APP_COMMON,即最優(yōu)先使用APPPATH下的model、libraries, 如果未找到,在APP_COMMON路徑下搜索。

/**
  * List of paths to load libraries from
  *
  * @var array
  */
 protected $_ci_library_paths = array(APPPATH, APP_COMMON, BASEPATH);

 /**
  * List of paths to load models from
  *
  * @var array
  */
 protected $_ci_model_paths = array(APPPATH, APP_COMMON);

 /**
  * List of paths to load helpers from
  *
  * @var array
  */
 protected $_ci_helper_paths = array(APPPATH, APP_COMMON, BASEPATH);

修改完成后,在common/model中新建模型文件,前后臺應(yīng)用就可以分別訪問到啦。

最后的問題

比較遺憾的是雖然分開了多個應(yīng)用,但是配置文件都是互相獨立,無法實現(xiàn)TP那樣的多層級多優(yōu)先級配置設(shè)置,因為如果你查看config中的配置文件的話,很多配置文件的獲取路徑都是寫死的,例如鉤子類(system/core/Hooks.php)中的100行左右

// Grab the "hooks" definition file.
  if (file_exists(APPPATH."config/hooks.php"))
  {
   include(APPPATH."config/hooks.php");
  }

  if (file_exists(APPPATH."config/".ENVIRONMENT."/hooks.php"))
  {
   include(APPPATH."config/".ENVIRONMENT."/hooks.php");
  }

相似的有很多配置文件的讀取都是只能在APPPATH的config目錄下讀取,想要重寫這個加載方案的話所要做的改動就太得不償失了,當(dāng)然這并不是CI的缺點,每個工具都有它的設(shè)計理念和使用場合,在實際需求中沒有好壞與否,只說適不適用。

而且,對于對 .htaccess 重寫支持不好的 nginx 來說,這種方式也不太友好。

當(dāng)然這并不影響CI框架的好用和高擴(kuò)展性,你甚至可以修改Loader.php給CI的MVC添加一個service層,只要你愿意的話。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30610.html

相關(guān)文章

  • 使用阿里服務(wù)搭建個人網(wǎng)站

    摘要:使用阿里服務(wù)搭建個人網(wǎng)站準(zhǔn)備工作購買云服務(wù)器購買域名下載文件資源阿里云一鍵安裝環(huán)境鏈接提取碼和鏈接提取碼鏈接提取碼鏈接提取碼安裝步驟遠(yuǎn)程登錄主機(jī)中填寫的是你所購買的阿里云的公網(wǎng)。 使用阿里服務(wù)搭建個人網(wǎng)站 準(zhǔn)備工作 1、購買云服務(wù)器 https://www.aliyun.com/produc... 2、購買域名 https://wanwang.aliyun.com/ 3、下載文件資...

    dabai 評論0 收藏0
  • Node.js + Koa2 + MySQL + Vue.js 實戰(zhàn)開發(fā)一套完整個人博客項目網(wǎng)站

    摘要:前端打造了前端網(wǎng)站和后臺管理系統(tǒng)。根目錄都是開發(fā)源代碼,根目錄下的文件夾下都是前端網(wǎng)站項目源代碼,根目錄下的文件夾下都是后臺管理系統(tǒng)的源代碼。后臺管理系統(tǒng)使用在根目錄下進(jìn)入項目,安裝包,執(zhí)行命令,啟動服務(wù)瀏覽器打開即可以訪問。 showImg(https://segmentfault.com/img/remote/1460000019603918); 這是個什么的項目? 使用 Node...

    wangxinarhat 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<