一、兩個方面
1、整體的思路與編程思想(大局觀,AOP)–20%
2、具體的編程知識與技巧(TP5、小程序、數據庫等)–80%
二、實現概述
- ThinkPHP 5(Web框架)
TP5手冊
1、編寫業務邏輯(本項目典型的業務邏輯就是訂單的處理和管理)
2、訪問數據庫
3、向客戶端提供數據(本項目使用API的方式向客戶端提供數據) - MySQL
1、數據存儲
2、數據表的設計
3、與業務緊密結合(注意數據冗餘合理利用) - 微信
1、微信支付
2、學習與借鑑,學習微信接口設計 - 小程序(客戶端)
1、直接與用戶交互
2、體驗很重要
三、流程與體系
- 服務端
ThinkPHP 5+MySQL構建REST API - 客戶端
向服務器請求數據,完成自身行爲邏輯 - CMS
向服務器請求數據,實現發貨與發送微信消息 - 客戶端與CMS
客戶端是給用戶使用的,CMS是給產品管理人員、運營人員使用的,通常情況下,CMS主要是對數據的增刪改查,比客戶端的業務邏輯簡單 - CMS的功能
1、基礎數據的增刪改查,比如添加商品、刪除商品類目
2、特殊操作,比如實現發送微信消息 - 注意
傳統情況是將服務器和CMS混在一起,可複用想差。而本項目採用三端分離(服務端、客戶端、CMS),CMS看作是客戶端的一種
四、項目特點
1、我們想構建一個通用的、適合互聯網公司的、有良好結構的產品
2、三端分離(客戶端、服務端與數據管理端分離)
3、基於REST API
4、基於Token令牌管理權限(對用戶分級,進行身份認證和權限管理)
5、一套架構適配ios、Android、小程序與單頁面
6、真正理解MVC
7、AOP面向切面編程思想在真實項目中的應用
8、使用ORM的方式與數據庫交互
9、MySQL數據表設計與數據冗餘的合理利用
10、用面向對象的思維構建前段代碼(ES6 Class&Module)
五、技術
TP5
- Web框架三大核心知識(路由、控制器與模型)
路由定義API接口
控制器編寫具體業務邏輯的入口,調用Model層實現業務邏輯,Model層寫業務邏輯
模型設計數據庫交互(ORM) - 驗證器、讀取器、緩存與全局異常處理
- ORM:模型與關聯模型
將一張表看作一個對象,如果是單表操作,這個概念沒有啥大的優越性,如果是關聯表,則將複雜的關聯關係抽象爲對象與對象之間的關聯
微信
MySQL
- 數據表的設計
- 數據冗餘合理利用
- 事務與所在訂單(庫存量)檢測中的應用
併發訪問數據庫
六、擴展:理解Web與前端
1.泛化的Web(具有公共API)。網站不是Web的全部,只是Web的一小部分
2.能寫出代碼和寫出易維護的代碼不是一回事兒
3.前端絕不等於做界面和特效,前端與服務器在編程思維上的差距已經越來越小
4.前端已經變得和服務器一樣需要處理大量的業務邏輯
七、TP5層次結構
入口文件(位於public目錄下的index.php)–>應用–>模塊(每個模塊包含完整的MVC三層)
八、PATH_INFO URL路徑模式解析
九、配置虛擬域名簡化URL路徑
域名簡化,以入口文件前後分爲前後兩部分。前半部分用虛擬域名z.cn,步驟如下:
1、讓apache認識z.cn
配置apache\conf\extra\http-vhost.conf
<VirtualHost *:80>
DocumentRoot “D:\xampp\htdocs\zerg\public”
ServerName z.cn
</VirtualHost>
同時也要加上localhost的虛擬配置
DocumentRoot “D:\xampp\htdocs”
ServerName localhost
2、編輯系統host文件 Windows\System32\drivers\etc
加入127.0.0.1 z.cn
3、重啓apache服務器
十、路由
以入口文件前後分爲前後兩部分,後半部分簡化如下:
在application下的route.php編寫
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------
//路由兩種編寫方法:
//1配置式方式
//return [
// '__pattern__' => [
// 'name' => '\w+',
// ],
// '[hello]' => [
// ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
// ':name' => ['index/hello', ['method' => 'post']],
// ],
//
//];
//2動態註冊方式
use think\Route;//調用Route這個類
//::調用類中的靜態方法、屬性、常量
//->引用一個類的屬性和方法
//=>定義數組
Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)');
//請求類型:GET,POST,DELETE,PUT,*
Route::rule('hello','sample/Test/hello','GET|POST',['https'=>false]);
//簡寫:Route::get('hello','sample/Test/hello');
十一、三種URL訪問模式
這三種模式在application/config.php下配置
- PATH_INFO
- 混合模式
- 強制使用路由模式
如果設置強制使用路由,那麼PATH_INFO就不起作用了
十二、獲取請求參數的三種方式
TP5手冊
- 第一種方法
route.php
use think\Route;
Route::post('hello/:id','sample/Test/hello');//模塊名/控制器名/操作方法名
Test.php
<?php
namespace app\sample\controller;
class Test
{
public function hello($id,$name,$age){
echo $id;
echo '|';
echo $name;
echo '|';
echo $age;
}
}
Postman
- 第二種方法(導入Request類)
route.php
use think\Route;
Route::post('hello/:id','sample/Test/hello');
Test.php
<?php
namespace app\sample\controller;
use think\Request;
class Test
{
public function hello(){
//param不區分http類型
$id = Request::instance()->param('id');//param可改爲get,route,post具體查手冊
$name = Request::instance()->param('name');
$age = Request::instance()->param('age');
$all = Request::instance()->param();
var_dump($all);
echo $id;
echo '|';
echo $name;
echo '|';
echo $age;
}
}
Postman
- 第三種方法(助手函數)
route.php
use think\Route;
Route::post('hello/:id','sample/Test/hello');
Test.php
<?php
namespace app\sample\controller;
use think\Request;
class Test
{
public function hello(){
$all=input('param.');//param.id/param.name\param.age
var_dump($all);
}
}
Postman
- 補充:依賴注入
Test.php
<?php
namespace app\sample\controller;
use think\Request;
class Test
{
public function hello(Request $request){
$all = $request->param();
var_dump($all);
}
}
十三、功能分析