php的核心架构如下图,thinksns 核心架构及目录结构
核心與服務、公共Model、插件、Widget、第三方類庫共同構成了系統的大根基,其他所有應用都其上構建。
術語解釋
核心:源自ThinkPHP框架,為系統提供MVC分離、底層數據庫支持等核心功能,并提供諸多便捷的類庫和函數庫供系統其他部分使用。位于/core/目錄。
服務:一組全局通用的類庫,實現對特定功能的封裝。位于/addons/services/目錄,如郵件發送(Mail)、用戶認證(Passport)等。
公共Model:一組全局通用模型。位于/addons/models/目錄,如附件模型(AttachModel)、地區模型(AreaModel)等。
插件:為實現某種功能而增加的程序文件。位于/addons/plugins/目錄,包括第三方平臺登陸插件和勛章兩種。
Widget:一組可以在任意HTML頁面調用的代碼塊。位于/addons/widgets/目錄,包括評論(Comment)、選擇好友(SelectFriend)等。
第三方類庫:其他開源的第三方類庫。位于/addons/libs/目錄,如phpmailer等。
應用:實現特定功能的獨立模塊,基于上述的系統結構構建。位于/apps/目錄,如日志(Blog)、相冊(Photo)等。
API:應用程序編程接口(Application Programming Interface)。位于/api/目錄,如微博API、用戶資料API等。
--------------------------------------------------------------------------------------------------------------------------------------
微博
微博雖然也是以系統獨立應用的身份出現(如圖1所示),但它還肩負著系統核心應用的責任。許多系統元素完全構建于微博應用之上,如微博Widget(即“分享”功能)是直接操作微博,而WAP應用則是完全使用微博API架構。
漫游平臺
系統應用中另一個特例是漫游應用。漫游應用來源于康盛的漫游平臺,由于漫游平臺的URL根據UCHome的目錄結構生成,這與ThinkSNS的目錄結構完全不同,而且還需兼顧到漫游平臺的可移植性,所以集成的漫游應用不走標準的ThinkSNS2.0核心,而是使用漫游應用內部已實現的一個最簡版框架。
如果您是模版開發人員,那您得特別留意!因為您在公共目錄下修改完頭部和左側的頁面后,還要修改漫游下的頭部和左側
(位于/apps/myop/themes/classic/目錄)。
------------------------------------------------------------------------------------------------------------------------------------------
目錄結構
ThinkSNS2.0
├─ _runtime ------------- 運行時緩存
├─ addons ------------- 擴展庫
│ ├─ libs ------------- 第三方類庫
│ ├─ models ------------- 公共Model
│ ├─ plugins ------------- 插件
│ │ ├─ login ------------- 第三方平臺登錄插件
│ │ ├─ Medal ------------- 勛章
│ │ └─ Tags ------------- 標簽
│ ├─ services ------------- 系統服務
│ └─ widgets ------------- 系統Widget
├─ api ------------- API庫
├─ apps ------------- 系統應用
│ ├─ admin ------------- 管理后臺
│ ├─ home ------------- Home應用
│ ├─ myop ------------- 漫游應用
│ ├─ wap ------------- 手機WAP端
│ └─ weibo ------------- 微博應用
├─ core ------------- 核心
│ ├─ sociax ------------- 系統核心文件
│ ├─ ThinkPHP ------------- ThinkPHP核心
│ └─ sociax.php ------------- 核心引導文件
├─ data ------------- 站點數據
├─ install ------------- 系統安裝文件
├─ public
│ ├─ admin ------------- 管理后臺的樣式
│ ├─ js ------------- 系統JS庫
│ └─ themes ------------- 系統模板
├─ access.php ------------- 節點權限控制文件
├─ cleancache.php ------------- 緩存清理文件
├─ config.inc.php ------------- 站點配置文件
├─ index.php ------------- 站點入口文件
├─ shorturl.php ------------- 短地址文件
└─ thumb.php ------------- 自動縮略圖生成文件
------------------------------------------------------------------------------------------------------------------------------
應用架構及目錄結構
應用的目錄位置及結構:
ThinkSNS2.0
├─ apps
├─ app
├─ Appinfo ------------- 安裝信息、安裝卸載執行文件、圖標
├─ Common ------------- 函數庫common.php
├─ Conf ------------- 項目配置config.php
├─ Language ------------- 通知、動態的語言包
├─ Lib
│ ├─ Action ------------- 操作類庫
│ ├─ Model ------------- 模型類庫
│ └─Widget ------------- 插件庫
└─ Tpl ------------- 模板、css、js文件
入口文件
ThinkSNS2.0只有一個公共入口文件,即ThinkSNS目錄下的index.php.
URL 模式
URL的訪問方式是index.php?app=APP_NAME&mod=Action&act=function
函數庫
應用自身的函數庫放在該應用目錄下的Common/common.php 里即可,這里面的函數會隨該應用一起加載,可在該應用內隨意調用。系統函數庫請參閱附錄的“函數庫”。
模板
[……]
10 / 32
應用的樣式文件統一存放在的Tpl 下的Public/目錄,通過../Public/xxx.css引用,應用的JS文件統一放到應用項目下的Tpl/下的Public/js/目錄,通過../Public/js/xxx.js引用。
--------------------------------------------------------------------------------------------------------------------
開發指南
3.1命名規范與編碼規范
參考ThinkPHP的命名與編碼規范:http://thinkphp.cn/Manual/20
3.2使用函數庫、類庫和Widget
使用系統函數庫
系統函數位于/core/sociax/functions.php和/core/sociax/extend.php文件,為全局有效函數,可以直接調用。
如獲取用戶昵稱的方法:$uname = getUserName($uid);
使用服務
服務位于/addons/services/目錄下,通過service('serviceName')->method ($param); 來使用服務。
如驗證用戶是否登錄的方法:$is_logged = service('Passport')->isLogged();
使用公共Model
公共Model位于/addons/models/目錄下,通過model('modelName')->method ($param);來使用公共Model。
如獲得地區列表的方法:$area_list = model('Area')->getAreaList();
使用Widget
Widget位于/addons/widgets/目錄下,通過W('widgetName',array('param'=> 'value'))來調用Widget。一般Widget是用在頁面中,所以調用方法為:{:W('widgetName',
11 / 32
array('param'=>'value'))}。
如在頁面中展示可能認識的人的方法:{:W('RelatedUse',array('uid'=>'1'))}
使用第三方類庫
第三方類庫一般放置在/addons/libs/目錄下,使用前通過include_once等函數將文件引入即可。
3.3使用彈出窗、提示消息、編輯器
在ThinkSNS2.0的世界里,jQuery庫是我們默認的JS框架,它在頁面頭部自動載入。ThinkSNS2.0在jQuery的基礎上對彈出窗、提示消息和KISSY編輯器進行了封裝,本節主要介紹它們的使用方法(jQuery庫官方文檔:http://docs.jquery.com/Main_Page)。
彈出窗
圖2 彈出窗效果圖
如圖2所示,彈出窗至少包含標題、關閉按鈕和內容三部分,為保證用戶操作的連貫性,一般會在內容部分添加“確定”和“取消”按鈕。
? 彈出窗的調用方法:
function yourFunc() {
ui.box.load(your_url, {title:'這里是標題'});
}
? 在your_url中放置彈出窗的內容。注意:“確定”和“取消”按鈕也是內容的一部分!
? 關閉彈出窗:
function close() {
ui.box.close();
}
12 / 32
提示消息
圖3 提示消息效果圖
調用方法:
function success() {
ui.success("更新完成");
}
function error() {
ui.error("新Email已存在");
}
編輯器
編輯相關的JS在頁面頭部自動載入,只需要調用E = KISSY.Editor("idOfTextarea"); 即可完成編輯器的加載。如:
$(document).ready(function(){
E = KISSY.Editor("idOfTextarea");
});
3.4 ThinkPHP開發指南
ThinkPHP官方文檔– 開發指南:http://thinkphp.cn/Manual/50
ThinkPHP官方文檔– 模板指南:http://thinkphp.cn/Manual/194
3.5應用開發
看了前面的介紹和說明,相信大家已經蠢蠢欲動。本章以開發禮物應用為例為大家展示開發一個應用的全過程。如果你是ThinkPHP 開發高手,你會發現開發一個應用其實就是創建一個新的項目,這也是ThinkSNS2.0 的魅力所在:應用獨立化。
13 / 32
開發流程
ThinkSNS2.0應用開發的一般流程:
1. 創建數據庫和數據表(沒有數據庫操作可略過)
2. 項目命名并創建項目目錄
3. 創建控制器類
4. 創建模型類
5. 創建模板文件
6. 運行和調試
開發需求和開發目標
我們的禮物應用需要實現以下的功能:
1. 用戶可以給關注的人或粉絲發送禮物
2. 用戶可以看到自己送出去的全部禮物
3. 用戶可以看到別人送給自己的全部禮物
4. 用戶可以回贈禮物給好友
5. 用戶發送禮物時能同時發送通知信息
6. 用戶發送禮物成功后可發送微博分享消息
7. 管理員可在后臺增加,修改,刪除禮物及禮物種類
8. 管理員可在后臺配置禮物的積分消費種類:積分?經驗?
9. 實現完善的積分消費功能,如果用戶積分不足則不能贈送
創建數據表
根據上面的需求分析可知,我們需要設計三張數據表,一個用來保存禮物的分類信息,另一個用來保存禮物的信息,還有一張用來保存用戶之間的送禮記錄。增加數據表請注意表的命名格式:數據庫表前綴+表名,其中數據庫表前綴在config.inc.php里的DB_PREFIX 常量已經定義。
增加禮物分類表:
字段
類型
說明
id
int
name
varchar
分類名
status
tinyint
是否啟用0禁用1啟用(默認)
cTime
int
創建時間
增加兩個默認分類:熱門禮物、最新上架
增加禮物信息表:
字段
類型
說明
id
int
categoryId
int
分類ID,對應上面的分類表的ID
name
varchar
禮物名
num
int
庫存
14 / 32
price
int
價格
img
varchar
禮物圖片
status
tinyint
是否啟用0 禁用1 啟用(默認)
cTime
int
創建時間
在這里我們當然也要預先準備好部分禮物,即初始化的禮物信息。
增加送禮記錄表:
字段
類型
說明
id
int
fromUserId
int
送禮人ID
toUserId
int
送禮對象
giftPrice
int
價格
giftImg
varchar
禮物圖片
sendInfo
text
附加信息
sendWay
tinyint
贈送的方式:1 公開2 私下3 匿名
cTime
int
創建時間
到此,數據表設計完畢。
在應用程序目錄下的/gift/Appinfo/文件夾里的install.sql文件包含了上述建表和插入預定義數據的sql語句。
創建應用目錄
圖4 應用目錄結構
如上圖所示,我們先在/apps/目錄下增加禮物目錄gift,然后在/apps/gift/目錄下創建上圖所示的目錄(請注意大小寫)。
? 應用程序目錄Lib:
應用程序目錄下存放的是Action控制器和Model模型的文件。
? 應用模板目錄Tpl:
由于本次禮物應用只有一套模板,因此我們直接在Tpl/目錄創建默認模板目錄default/,然后在default/目錄下添加我們需要的Index 模板和一個公共模板目錄Public/。
? 公共函數目錄Common:
這里可以存放本次應用的公共函數,文件名為common.php,該文件會在執行過程中自動加載,這些函數在Action/ 和Model/目下的文件里可以直接使用,無需再次引入文件。同時我們還可以直接使用ThinkSNS2.0里的公共函數,這些函數保存在
15 / 32
/core/sociax/文件夾下的fuctions.php和extend.php里,它包括我們最常用的數據處理或者數據獲得,如h()、t()過濾函數,getUserName()函數(在模板文件的調用方法為: {$userId|getUserName})、getUserFace()函數和friendlyDate()函數(用法同getUserName())。以上的幾個函數推薦大家使用。
? 應用配置目錄Conf:
如果應用里有需要修改系統默認的常量或者在里面添加項目需要的一些配置參數,就需要在項目的Conf/目錄下面,創建一個名稱是config.php 的配置文件,該文件也會自動加載。公共函數目錄和應用配置目錄非必需的目錄,視應用開發決定是否需要。本次禮物開發中只用到公共函數文件夾。
? 語言目錄Language:
用以保存應用的系統通知模板和動態模板。本次禮物開發中將用到系統通知模板。在Language/目錄下創建中文語言包目錄cn/,然后添加通知模板文件notify.php (動態是同樣的道理,只是文件名為:feed.php)。
? 安裝包目錄Appinfo:
用于在ThinkSNS后臺的應用安裝/卸載操作,必須包含info.php文件(用以獲取應用信息),如果含有install.php或uninstall.php文件,則會在應用安裝、卸載時自動調用。
開始編程
? 公共函數層
在Common/目錄下,新建common.php文件(注意文件名的大小寫),寫入所需函數,如獲取應用配置參數的函數:
function getConfig($key=NULL){
[……]
}
詳細代碼請參見該文件。
這個文件里的函數在Action/ 、Model/ 和Tpl/目錄下的文件都可以直接使用。
? MODEL層
在Lib/Model/目錄下,新建三個文件GiftCategoryModel.class.php,GiftModel.class.php 和UserGiftModel.class.php,分別創建代碼如下:
class GiftCategoryModel extends Model{ }
class GiftModel extends Model{ }
class UserGiftModel extends Model{ }
通過以上步驟,我們現在已將數據庫表和模型類建立了關聯關系。在項目的Action 類和Model 類中,已可以直接對數據庫進行相關操作。
有些人習慣在Model 類里封裝一些方法,這樣更符合MVC 規范,也有一些人習慣把方法都寫在Action 里,方便程序的閱讀,這主要看個人習慣。本次開發將基本方法寫進入Model 層里。詳細代碼請參見相應文件。
? ACTION層
在Lib/Action/目錄下,建立IndexAction.class.php,并創建代碼如下:
class IndexAction extends Action{ }
詳細代碼參加該文件。
? 模板層
16 / 32
我們在Tpl/default/目錄下需要兩個文件夾:Index和Public。Index文件夾名是與IndexAction.class.php文件對應,表示Index文件夾下面的文件都是IndexAction.class.php文件所需要的全部模板。應用的公共文件我們一般放到Tpl/default/Public/目錄下,比如禮物應用的禮物圖片、JS文件、CSS文件、應用頭文件_mainNav.html等。當然,這些目錄的設置完全由開發者自己決定,只要保證調用文件的路徑正確就可以了。
我們先來看看ThinkSNS2.0 模板文件的一般結構,開發人員引入本應用自己的樣式文件和JS 文件后可直接在畫布層里增加相應的顯示代碼即可:
[……]
詳細內容請參閱具體代碼。下面介紹模板文件中幾處有學習價值的代碼。
1. ThinkSNS2.0 全面使用jQuery 技術,jQuery 是一個不錯的輕量級的JS框架,能幫助我們快速的開發JS 應用,并在一定程度上改變了我們寫JavaScript代碼的習慣。ThinkSNS2.0 在頭文件里已經引入jQuery 庫,開發人員不必重復引入。
2. Tpl/default/Index/目錄下的index.html文件,這是禮物中心的模板,里面選擇發送好友的功能用到好友選擇widget,只需要在模板里增加{:W("SelectFriend")},然后用$_POST['fri_ids']就可以獲得選擇的好友ID.
3. 因為我們是用findPage()方式獲取收到和送出的禮物列表,故返回的數據已經有分頁的變量了,只要在模板合適的地方增加如下的代碼即可:
{$gifts.html}
17 / 32
增加積分消費功能
上面的程序基本完成了禮物的全部操作,接下來我們要增加積分消費功能。至于禮物消費的積分類型,是積分或者還是經驗,可以在后臺設置,詳細請看后臺程序說明。首先在發送禮物頁面增加顯示當前用戶所擁有多少積分的功能,我們只要在IndexAction.class.php文件的index()方法里增加以下程序即可:
//獲取當前用戶的積分
$money = X('Credit')->getUserCredit($this->mid);
$moneyType = getConfig('credit');
$this->assign('money',$money[$moneyType]);
在發送禮物的模板里增加以下一行代碼:
我目前擁有的 {$money.alias}是:{$money.credit}
然后在發送禮物的函數里(UserGiftModel.class.php 的sendGift()方法)增加扣除所選禮物的相應積分程序:
//扣除相應積分
$giftPrice = intval($giftInfo['price']);
$prices = $userNum*$giftPrice;
$moneyType = getConfig('credit');
//積分操作
$setCredit = X('Credit');
//檢測積分是否足夠
$userCredit = $setCredit->getUserCredit($fromUid);
if($userCredit[$moneyType]['credit']
return $userCredit[$moneyType]['alias'].'不足,贈送失敗~';
}
$setCredit->setUserCredit($fromUid,array($moneyType=>$prices),-1);
這里調用了公共類庫services中的積分操作類,即X('Credit')。
到這里積分消費功能增加完畢。
增加發通知功能
首先需要增加禮物的通知模板。在Language/目錄下創建一個文件夾cn,再在cn文件夾下創建通知模板文件notify.php,代碼如下:
return array(
'gift_send' => array(
'title' => '{actor}給您送了一個禮物',
'body' => $img.'
'.$sendback.'
'.$content.'
去看看
18 / 32
',
),
);
?>
在發送禮物成功后增加以下程序:
//給接收人發送通知
$this->__doNotify($toUser,$sendInfo,$giftInfo,$fromUid,$appId);
__doNotify() 方法的實現請參閱具體代碼。
這里調用了公共類庫services中的系統通知類,即X('Notify')。
到這里發通知功能完成了。
增加發送動態功能
發送動態的機制與發送通知的機制完全相同,區別只有如下兩點:
? 通知使用/Language/cn/feed.php,而動態使用/Language/cn/notify.php
?通知服務使用X('Notify')或service('Notify'),而動態使用X('Feed')或service('Feed')
由于禮物應用沒有用到動態,這里也不再贅述。
增加微博分享功能
首先我們需要在“管理后臺-內容- 模板管理”增加一個禮物贈送的模板:
19 / 32
在組裝通知數據前,初始化一個獲贈對象變量:
// 贈送的對象名稱 用于公開贈送微博
$toUserName = NULL;
在組裝公開贈送的通知信息中添加如下代碼,用以@ 到各個獲贈用戶:
// 贈送對象名稱
$toUserName .= '@'.getUserName($fid).' ';
在通知信息組裝結束后,添加如下代碼,將微博信息暫存于SESSION中:
// 公開則發微薄
if($toUserName){
$_SESSION['gift_send_weibo'] = urlencode ( serialize ( array(
'user' => $toUserName,
'title' => $giftInfo['name'],
'content' => $data['content'],
'url' => U('gift/Index/index', array(
'uid' =>$fid,
'type' =>1,
'type_data'=>realityImageURL($giftInfo['img']))),
)));
}
在Lib/Index/ IndexAction.class.php文件里的sendbox()函數內添加如下代碼:
//判斷是否有公開贈送信息,存在,則賦值給模板,用于發微薄if(isset($_SESSION['gift_send_weibo'])&&!empty($_SESSION['gift_send_weibo'])){
$this->assign('tpl_data',$_SESSION['gift_send_weibo']);
unset($_SESSION['gift_send_weibo']);
}
在Tpl/default/Index/目錄下送出的禮物sendbox.html模板文件里,添加WeiboWidget引用(只有發送微博的信息存在時才加載),如下:
{:W('Weibo',array(
'tpl_name'=>'gift_send_weibo',
'button_title'=>'分享',
))}
到這里公開贈送發微博功能完成了。
增加應用后臺
ThinkSNS2.0 為應用增加管理后臺的方法很簡單,直接在應用的Action/目錄下增加AdminAction.class.php文件,然后導入并繼承AdministratorAction類即可完成權限管理:
20 / 32
//引入后臺管理類
import('admin.Action.AdministratorAction');
class AdminAction extends AdministratorAction {
function _initialize(){
// 管理權限判定
parent::_initialize();
[……]
}
[……]
}
?>
注意:在_initialize函數里,首先要執行parent::_initialize(),進行管理權限判定。
更多詳細代碼請見具體文件。
接著我們增加對應的管理頁面的模板,Tpl/default/目錄下增加Admin/目錄,然后在該目錄下增加_header.html, _footer.html, _tab.html, index.html, giftlist.html, category.html, edit_gift_tab.html, edit_category_tab.html幾個模板文件。模板開發方式同前臺的模板一樣,在此不再重復。
制作安裝/卸載包
在應用的目錄下增加安裝信息目錄,命名為Appinfo,然后在該目錄下增加應用圖標(ico_app.gif、ico_app_large.gif)、應用配置文件(info.php)、應用安裝文件(install.php)、應用數據庫文件(install.sql)和應用卸載文件(uninstall.php)。
? 配置文件內容:
if (!defined('SITE_PATH')) exit();
return array(
// 應用名稱[必填]
'NAME' => '禮物',
// 應用簡介[必填]
'DESCRIPTION' => '禮物贈送',
// 托管類型[必填](0:本地應用,1:遠程應用)
'HOST_TYPE' => '0',
// 前臺入口[必填](格式:Action/act)
'APP_ENTRY' => 'Index/index',
// 應用圖標[必填]
'ICON_URL' => SITE_URL . '/apps/gift/Appinfo/ico_app.gif',
// 應用圖標[必填]
'LARGE_ICON_URL' => SITE_URL . '/apps/gift/Appinfo/ico_app_large.gif',
// 后臺入口[選填]
'ADMIN_ENTRY' => 'Admin/index',
// 統計入口[選填](格式:Model/method)
21 / 32
'STATISTICS_ENTRY' => 'GiftStatistics/statistics',
[……]
);
?>
注意:其中的SITE _URL是站點根目錄網址,如果直接使用它本身的話程序會自動解釋成絕對網址,還有一個好處就是網站轉移的時候這些信息都不需要修改,程序會自動解釋出新的網址賦值給它。當然,你也可以使用絕對網址。
? 安裝文件內容:
數據庫操作的語句均統一放在數據庫文件install.sql中,install.php的功能就是執行該文件:
if (!defined('SITE_PATH')) exit();
header('Content-Type: text/html; charset=utf-8');
$sql_file = APPS_PATH.'/gift/Appinfo/install.sql';
//執行sql文件
$res = M('')->executeSqlFile($sql_file);
if(!empty($res)){//錯誤
echo $res['error_code'];
echo '
';
echo $res['error_sql'];
//清除已導入的數據
include_once(APPS_PATH.'/gift/Appinfo/uninstall.php');
exit;
}
?>
? 數據庫文件內容:
首先,寫入該應用三張數據表的添加語句;然后,再加入應用系統配置信息和微博模板的插入語句,若有設定積分規則的應用,也加上積分規則的插入語句,可以參見日志、相冊等應用的數據庫文件,代碼如下:
SET FOREIGN_KEY_CHECKS=0;
[……三張數據表及其預設信息的sql語句]
#添加ts_system_data數據
REPLACE INTO `ts_system_data` (`uid`,`list`,`key`,`value`,`mtime`)
VALUES
(0, 'gift', 'credit', 's:5:"score";', '2010-12-24 11:22:17');
#模板數據
DELETE FROM `ts_template` WHERE `name` = 'gift_send_weibo';
INSERT INTO `ts_template` (`name`, `alias`, `title`, `body`, `lang`, `type`, `type2`, `is_cache`, `ctime`)
22 / 32
VALUES
('gift_send_weibo', '禮物贈送', '','我送給{user} 一份禮物:【{title}】{content} 參與送禮{url}', 'zh', 'gift', 'weibo', 0, 1290417734);
這里可以直接使用由工具導出的sql文件和語句。
? 卸載文件內容:
刪除應用的數據表、應用系統配置信息和微博模板。若應用還設置了積分規則,則也要同時刪除其積分規則,可以參見日志、相冊等應用的卸載文件。
if (!defined('SITE_PATH')) exit();
$db_prefix = C('DB_PREFIX');
$sql = array(
// gift數據
"DROP TABLE IF EXISTS `{$db_prefix}gift`;",
"DROP TABLE IF EXISTS `{$db_prefix}gift_category;",
"DROP TABLE IF EXISTS `{$db_prefix}gift_user;",
// ts_system_data數據
"DELETE FROM `{$db_prefix}system_data` WHERE `list` = 'gift'",
// 模板數據
"DELETE FROM `{$db_prefix}template` WHERE `name` = 'gift_send_weibo';",
);
foreach ($sql as $v)
M('')->execute($v);
?>
至此,安裝卸載包制作完成。
登錄后臺后進入“應用->應用管理->添加應用”點擊“安裝”應用就可以了。然后更新一下系統緩存就可以在前臺的應用列表中看到我們的禮物應用了。
調試
要調試我們的有程序,有很多種方法,在此我們推薦幾種常用的調試方法。
? 用ThinkPHP 自帶的dump()方法把過程變量打印出來,看是是否與預想的結果一樣
? 使用ThinkPHP 的getLastSql()方法取得最后的SQL語句并用dump()打印出來,檢查SQL語句是否正確
? 在Conf/config.php文件里增加DEBUG_MODE常量并賦值為true,即把ThinkPHP 的調試模式打開(注:修改后需要清理緩存)
總結
以上是生活随笔為你收集整理的php的核心架构如下图,thinksns 核心架构及目录结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript基础教程
- 下一篇: Node.Js教程