項(xiàng)目地址(求star): https://github.com/genglintong/market
項(xiàng)目背景: 軟件工程的一個(gè)課程作業(yè)脱吱,主要是簡單的增刪改查宦搬,適合入門页慷。
準(zhǔn)備工作:需要安裝好php環(huán)境州袒,mysql數(shù)據(jù)庫,nginx服務(wù)器
開始
- clone代碼到本地
# 需要安裝git命令
git clone https://github.com/genglintong/marke
# 進(jìn)入后端模塊畦徘,前端模塊暫時(shí)不用管
cd market/market/market
- thinkphp 框架了解
thinkphp是一個(gè)簡單的睡榆,免費(fèi)的宿崭,開源的輕量級php WEB開發(fā)框架
www WEB部署目錄(或者子目錄)
├─index.php 入口文件
├─README.md README文件
├─Application 應(yīng)用目錄
├─Public 資源文件目錄
└─ThinkPHP 框架目錄 - MVC
MVC即model(模型)吆鹤,view(視圖)廊镜,controller(控制器)股缸,它是即是一種框架旺入,也是一種思想聘殖。
model:程序各個(gè)對象的具體邏輯實(shí)現(xiàn)
View:主要是界面展示類
Controller:對請求進(jìn)行處理血久,調(diào)用各個(gè)模型類的方法。
淺談MVC模式
MVC設(shè)計(jì)模式
菜鳥教程 - 項(xiàng)目搭建
#修改nginx.conf
cd nginx.conf 配置目錄
vi nginx.conf
修改服務(wù)器root目錄為項(xiàng)目目錄(nginx 操作方法版仔,apache類似)益缎,修改端口(也可以不修改弊仪,我這里是添加了一個(gè)端口的監(jiān)聽)颓鲜。
# 重啟nginx 使配置生效
sudo nginx -s reload
訪問 http://localhost:8090/
成功則如下圖
淺嘗PHP項(xiàng)目
- 訪問流程
首先我們知道服務(wù)器在接收用戶請求時(shí)會去根目錄(就就是我們上面配置文件的目錄酌予,默認(rèn)www抛虫,我們修改為了market)松靡,然后服務(wù)器會找index文件訪問。
這時(shí)莱褒,我們看目錄下文件击困,會發(fā)現(xiàn)又一個(gè)index.php, 這個(gè)文件是整個(gè)項(xiàng)目的入口文件。
// 檢測PHP環(huán)境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 開啟調(diào)試模式 建議開發(fā)階段開啟 部署階段注釋或者設(shè)為false
define('APP_DEBUG',True);
// 定義應(yīng)用目錄
define('APP_PATH','./Application/');
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
這個(gè)文件就是一些功能的配置,其中定義應(yīng)用目錄定義的目錄為整個(gè)項(xiàng)目的項(xiàng)目代碼所在目錄阅茶。
然后它會根據(jù)我們訪問的URL蛛枚,去尋找到對應(yīng)的控制器。(默認(rèn)是index)
其實(shí)我們訪問的第一個(gè)URL是這樣子的(加上默認(rèn)信息)
http://localhost:8090/index.php/Home/index/index
即訪問 Application/Home 模塊的 Controller下脸哀,index控制器的index方法蹦浦。
thinkphp路由
- 舉個(gè)栗子
URL : http://localhost:8090/index.php/home/goods/searchGoods
路徑:home 下 Goods控制器中 searchGoods方法
#代碼如下
/**
* 搜索接口
* @param number $pn pagenum 默認(rèn)為0
* @param string $type 類型 為空則表示不按照類型展示
* @param string $title 按照title模糊搜索 為空則表示不按照標(biāo)題搜索
* @param number $price 0 不按照價(jià)格搜索 -1 從低到高 -2 從高到低 >0 表示大于$title的商品
* @param number $vol 0 不按照余量搜索 1 從低到高 2 從高到低
*/
public function searchGoods($pn = 0,$type = "",$title = "",$price = 0,$vol = 0){
//實(shí)例化 Goods
// 框架封裝的model層
$Goods = M('Goods');
$fields = array();
$order = array();
//$fields['pn'] = $pn;
if ($type != ""){
$fields['type'] = array('eq',$type);
}
........
// 根據(jù)上述條件拼接成sql
$data = $Goods->where($fields)->order($order)->limit($pn*10,10)->getField('id,title,price,overplus,intro,user_id,type,img');
//獲取前一條執(zhí)行的SQL
$sql = $Goods->getLastSql();
//echo $sql;
$serchData['sql'] = $sql;
$serchData['data'] = $data;
//輸出信息
$this->ajaxReturn($serchData);
}
- 數(shù)據(jù)庫信息配置
數(shù)據(jù)庫信息配置在Conf/Config.php中
框架會自動讀取配置,連接數(shù)據(jù)庫撞蜂。