一、技術(shù)部分
后端基于thinkphp5.1框架
簡(jiǎn)介
ThinkPHP是一個(gè)開(kāi)源的,快速、簡(jiǎn)單的面向?qū)ο蟮妮p量級(jí)PHP開(kāi)發(fā)框架,是為了敏捷WEB應(yīng)用開(kāi)發(fā)和簡(jiǎn)化企業(yè)應(yīng)用開(kāi)發(fā)而誕生的。ThinkPHP從誕生以來(lái)一直秉承簡(jiǎn)潔實(shí)用的設(shè)計(jì)原則,在保持出色的性能和至簡(jiǎn)的代碼的同時(shí),也注重易用性。遵循Apache2開(kāi)源許可協(xié)議發(fā)布,開(kāi)發(fā)文檔健全。
?
命名規(guī)范
ThinkPHP5遵循PSR-2命名規(guī)范和PSR-4自動(dòng)加載規(guī)范,并且注意如下規(guī)范:
目錄和文件
·?目錄使用小寫(xiě)+下劃線;
·?類(lèi)庫(kù)、函數(shù)文件統(tǒng)一以.php為后綴;
·?類(lèi)的文件名均以命名空間定義,并且命名空間的路徑和類(lèi)庫(kù)文件所在路徑一致;
·?類(lèi)文件采用駝峰法命名(首字母大寫(xiě)),其它文件采用小寫(xiě)+下劃線命名;
·?類(lèi)名和類(lèi)文件名保持一致,統(tǒng)一采用駝峰法命名(首字母大寫(xiě));
函數(shù)和類(lèi)、屬性命名
·?類(lèi)的命名采用駝峰法(首字母大寫(xiě)),例如?User、UserType,默認(rèn)不需要添加后綴,例如UserController應(yīng)該直接命名為User;
·?函數(shù)的命名使用小寫(xiě)字母和下劃線(小寫(xiě)字母開(kāi)頭)的方式,例如?get_client_ip;
·?方法的命名使用駝峰法(首字母小寫(xiě)),例如?getUserName;
·?屬性的命名使用駝峰法(首字母小寫(xiě)),例如?tableName、instance;
·?以雙下劃線“__”打頭的函數(shù)或方法作為魔術(shù)方法,例如?__call?和?__autoload;
常量和配置
·?常量以大寫(xiě)字母和下劃線命名,例如?APP_PATH和?THINK_PATH;
·?配置參數(shù)以小寫(xiě)字母和下劃線命名,例如?url_route_on?和url_convert;
數(shù)據(jù)表和字段
·?數(shù)據(jù)表和字段采用小寫(xiě)加下劃線方式命名,并注意字段名不要以下劃線開(kāi)頭,例如?think_user?表和?user_name字段,不建議使用駝峰和中文作為數(shù)據(jù)表字段命名。
應(yīng)用類(lèi)庫(kù)命名空間規(guī)范
應(yīng)用類(lèi)庫(kù)的根命名空間統(tǒng)一為app(不建議更改,可以設(shè)置app_namespace配置參數(shù)更改,V5.0.8版本開(kāi)始使用APP_NAMESPACE常量定義);
例如:app\index\controller\Index和app\index\model\User。
?
目錄結(jié)構(gòu)
?
架構(gòu)總覽
ThinkPHP5.0應(yīng)用基于MVC(模型-視圖-控制器)的方式來(lái)組織。
MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務(wù)。
5.0的URL訪問(wèn)受路由決定,如果關(guān)閉路由或者沒(méi)有匹配路由的情況下,則是基于:
http://serverName/index.php(或者其它應(yīng)用入口文件)/模塊/控制器/操作/參數(shù)/值…
下面的一些概念有必要做下了解,可能在后面的內(nèi)容中經(jīng)常會(huì)被提及。
入口文件
用戶(hù)請(qǐng)求的PHP文件,負(fù)責(zé)處理一個(gè)請(qǐng)求(注意,不一定是URL請(qǐng)求)的生命周期,最常見(jiàn)的入口文件就是index.php,有時(shí)候也會(huì)為了某些特殊的需求而增加新的入口文件,例如給后臺(tái)模塊單獨(dú)設(shè)置的一個(gè)入口文件admin.php或者一個(gè)控制器程序入口think都屬于入口文件。
應(yīng)用
應(yīng)用在ThinkPHP中是一個(gè)管理系統(tǒng)架構(gòu)及生命周期的對(duì)象,由系統(tǒng)的?\think\App類(lèi)完成,應(yīng)用通常在入口文件中被調(diào)用和執(zhí)行,具有相同的應(yīng)用目錄(APP_PATH)的應(yīng)用我們認(rèn)為是同一個(gè)應(yīng)用,但一個(gè)應(yīng)用可能存在多個(gè)入口文件。
應(yīng)用具有自己獨(dú)立的配置文件、公共(函數(shù))文件。
模塊
一個(gè)典型的應(yīng)用是由多個(gè)模塊組成的,這些模塊通常都是應(yīng)用目錄下面的一個(gè)子目錄,每個(gè)模塊都有自己獨(dú)立的配置文件、公共文件和類(lèi)庫(kù)文件。
5.0支持單一模塊架構(gòu)設(shè)計(jì),如果你的應(yīng)用下面只有一個(gè)模塊,那么這個(gè)模塊的子目錄可以省略,并且在應(yīng)用配置文件中修改:
'app_multi_module'?=> false,?
控制器
每個(gè)模塊擁有獨(dú)立的MVC類(lèi)庫(kù)及配置文件,一個(gè)模塊下面有多個(gè)控制器負(fù)責(zé)響應(yīng)請(qǐng)求,而每個(gè)控制器其實(shí)就是一個(gè)獨(dú)立的控制器類(lèi)。
控制器主要負(fù)責(zé)請(qǐng)求的接收,并調(diào)用相關(guān)的模型處理,并最終通過(guò)視圖輸出。嚴(yán)格來(lái)說(shuō),控制器不應(yīng)該過(guò)多的介入業(yè)務(wù)邏輯處理。
事實(shí)上,5.0中控制器是可以被跳過(guò)的,通過(guò)路由我們可以直接把請(qǐng)求調(diào)度到某個(gè)模型或者其他的類(lèi)進(jìn)行處理。
5.0的控制器類(lèi)比較靈活,可以無(wú)需繼承任何基礎(chǔ)類(lèi)庫(kù)。
一個(gè)典型的Index控制器類(lèi)如下:
namespace app\index\controller;??class Index??{?????public function?index()?????{?????????return?'hello,thinkphp!';?????}?}?
操作
一個(gè)控制器包含多個(gè)操作(方法),操作方法是一個(gè)URL訪問(wèn)的最小單元。
下面是一個(gè)典型的Index控制器的操作方法定義,包含了兩個(gè)操作方法:
namespace app\index\controller;??class Index??{?????public function?index()?????{?????????return?'index';?????}??????????public function?hello($name)?????{?????????return?'Hello,'.$name;?????}?}?
操作方法可以不使用任何參數(shù),如果定義了一個(gè)非可選參數(shù),則該參數(shù)必須通過(guò)用戶(hù)請(qǐng)求傳入,如果是URL請(qǐng)求,則通常是$_GET或者$_POST方式傳入。
模型
模型類(lèi)通常完成實(shí)際的業(yè)務(wù)邏輯和數(shù)據(jù)封裝,并返回和格式無(wú)關(guān)的數(shù)據(jù)。
模型類(lèi)并不一定要訪問(wèn)數(shù)據(jù)庫(kù),而且在5.0的架構(gòu)設(shè)計(jì)中,只有進(jìn)行實(shí)際的數(shù)據(jù)庫(kù)查詢(xún)操作的時(shí)候,才會(huì)進(jìn)行數(shù)據(jù)庫(kù)的連接,是真正的惰性連接。
ThinkPHP的模型層支持多層設(shè)計(jì),你可以對(duì)模型層進(jìn)行更細(xì)化的設(shè)計(jì)和分工,例如把模型層分為邏輯層/服務(wù)層/事件層等等。
視圖
控制器調(diào)用模型類(lèi)后返回的數(shù)據(jù)通過(guò)視圖組裝成不同格式的輸出。視圖根據(jù)不同的需求,來(lái)決定調(diào)用模板引擎進(jìn)行內(nèi)容解析后輸出還是直接輸出。
視圖通常會(huì)有一系列的模板文件對(duì)應(yīng)不同的控制器和操作方法,并且支持動(dòng)態(tài)設(shè)置模板目錄。
驅(qū)動(dòng)
系統(tǒng)很多的組件都采用驅(qū)動(dòng)式設(shè)計(jì),從而可以更靈活的擴(kuò)展,驅(qū)動(dòng)類(lèi)的位置默認(rèn)是放入核心類(lèi)庫(kù)目錄下面,也可以重新定義驅(qū)動(dòng)類(lèi)庫(kù)的命名空間而改變驅(qū)動(dòng)的文件位置。
行為
行為(Behavior)是在預(yù)先定義好的一個(gè)應(yīng)用位置執(zhí)行的一些操作。類(lèi)似于AOP編程中的“切面”的概念,給某一個(gè)切面綁定相關(guān)行為就成了一種類(lèi)AOP編程的思想。所以,行為通常是和某個(gè)位置相關(guān),行為的執(zhí)行時(shí)間依賴(lài)于綁定到了哪個(gè)位置上。
要執(zhí)行行為,首先要在應(yīng)用程序中進(jìn)行行為偵聽(tīng),例如:
// 在app_init位置偵聽(tīng)行為?\think\Hook::listen('app_init');?
然后對(duì)某個(gè)位置進(jìn)行行為綁定:
// 綁定行為到app_init位置?\think\Hook::add('app_init','\app\index\behavior\Test');?
一個(gè)位置上如果綁定了多個(gè)行為的,按照綁定的順序依次執(zhí)行,除非遇到中斷。
前端基于React框架
l?關(guān)于服務(wù)器配置建議
二、技術(shù)運(yùn)維服務(wù)內(nèi)容
一年的技術(shù)維護(hù)服務(wù)內(nèi)容包括:在乙方服務(wù)責(zé)任范圍內(nèi)保證網(wǎng)站的正常運(yùn)行使用。但不包括因非本合同內(nèi)乙方提供的服務(wù)器、網(wǎng)絡(luò)等因素引起的訪問(wèn)故障、因非乙方人員錯(cuò)誤操作所造成的運(yùn)行故障或網(wǎng)站結(jié)構(gòu)的改變、設(shè)計(jì)風(fēng)格的改變和功能模塊的增加、網(wǎng)站內(nèi)容維護(hù)。詳情如下:
?
1、安全漏洞修補(bǔ)
對(duì)由甲方或甲方委托的第三方安全技術(shù)代理公司查出的安全漏洞進(jìn)行代碼修補(bǔ)。
2、災(zāi)難修復(fù)
若正式上線的服務(wù)器,即網(wǎng)站服務(wù)環(huán)境發(fā)生崩潰,配合甲方公司進(jìn)行系統(tǒng)的恢復(fù)工作,恢復(fù)到系統(tǒng)交接時(shí)的狀態(tài),即正式上線節(jié)點(diǎn)時(shí)狀態(tài),數(shù)據(jù)需由甲方公司提供數(shù)據(jù)庫(kù)備份文件和用戶(hù)文件(上傳文件)備份。
3、技術(shù)保障
3.1對(duì)于使用方面的問(wèn)題,提供電話維護(hù)。
3.2維護(hù)項(xiàng)目包括由于系統(tǒng)設(shè)計(jì)問(wèn)題而出現(xiàn)的系統(tǒng)故障、系統(tǒng)運(yùn)行錯(cuò)誤。非軟件系統(tǒng)設(shè)計(jì)問(wèn)題,如:硬件損壞、使用者操作不當(dāng)、使用者惡意行為造成的系統(tǒng)問(wèn)題故障不含在維護(hù)范圍內(nèi)。
?
二、?服務(wù)方式
出現(xiàn)問(wèn)題或故障后,甲方通過(guò)郵件/電話等形式向乙方提出要求,乙方根據(jù)甲方要求的以下一種或幾種服務(wù)方式為甲方提供服務(wù):
1、電話應(yīng)答服務(wù)
乙方為甲方指定經(jīng)驗(yàn)豐富的專(zhuān)職人員,與甲方相關(guān)人員對(duì)接。負(fù)責(zé)解答、幫助處理在使用過(guò)程中所遇到的故障或困難。
2、遠(yuǎn)程桌面協(xié)作服務(wù)
甲方須向乙方開(kāi)放服務(wù)器的遠(yuǎn)程桌面服務(wù),以便于乙方對(duì)甲方的網(wǎng)站系統(tǒng)進(jìn)行正常的維護(hù)和故障排除。
乙方承諾未經(jīng)甲方書(shū)面許可,不將甲方服務(wù)器任何信息向任意第三方傳播,否則應(yīng)當(dāng)賠償由此給甲方造成的損失。此義務(wù)不因本合同的終止而終止。
?
3、上門(mén)服務(wù)
如確有必要,經(jīng)由甲乙雙方協(xié)商,指定專(zhuān)業(yè)人員,上門(mén)服務(wù)。
三、?服務(wù)響應(yīng)時(shí)間
1.工作日響應(yīng)時(shí)間為:5*8小時(shí)
2.出現(xiàn)上述問(wèn)題或其他異常問(wèn)題,甲方通過(guò)郵件的形式向乙方提出要求后,乙方將在24小時(shí)內(nèi)(以甲方發(fā)出的郵件記錄的時(shí)間為起點(diǎn))處理完成。
3.若有突發(fā)或緊急情況不在工作時(shí)間內(nèi),可與項(xiàng)目經(jīng)理協(xié)商極速解決。
?
四、?后期托管維護(hù)內(nèi)容清單和報(bào)價(jià)
設(shè)計(jì)人/天:1500(元)
技術(shù)人/天:2500(元)
分類(lèi) | 項(xiàng)目名稱(chēng) | 說(shuō)明 | 人天 | 備注 |
Banner設(shè)計(jì) | 手繪/合成 | 根據(jù)客戶(hù)實(shí)際內(nèi)容資料及使用場(chǎng)景,進(jìn)行banner圖設(shè)計(jì) | 3.0 | |
一級(jí)欄目設(shè)計(jì) | 根據(jù)主題及內(nèi)容要求,進(jìn)行頁(yè)面設(shè)計(jì)(高度在3屏內(nèi)) | 6.0 | ||
二級(jí)欄目設(shè)計(jì) | 根據(jù)主題及內(nèi)容要求,進(jìn)行頁(yè)面設(shè)計(jì)(高度在6屏內(nèi)) | 3.5 | ||
頁(yè)面制作 | 根據(jù)網(wǎng)站UI設(shè)計(jì)進(jìn)行JS腳本開(kāi)發(fā),如頁(yè)面交互效果的實(shí)現(xiàn)。 將設(shè)計(jì)稿按W3C標(biāo)準(zhǔn)HTML頁(yè)面進(jìn)行制作、兼容pc端:ie9+,chrome 59+,firefox 54+,safari 10.1+;移動(dòng)端:ios的safari,Andriod,F(xiàn)lyme,MIUI,ColorOS,EMUI 默認(rèn)瀏覽器,微信、微博內(nèi)置瀏覽器,品牌瀏覽器firefox,opera,chrome,UC,QQ,360,百度瀏覽器中頁(yè)面響應(yīng),展示最佳效果。 | 2.0 | ||
icon設(shè)計(jì) | icon設(shè)計(jì) | 頁(yè)面中的獨(dú)立icon設(shè)計(jì) | 1.0 | |
技術(shù)部分 | 前端+后臺(tái)服務(wù) | 根據(jù)實(shí)際需求評(píng)估人/天 |
備注說(shuō)明:
*?價(jià)格為服務(wù)人/天單價(jià),最終以實(shí)際作業(yè)數(shù)量核算。
* 不包含正版圖片等采購(gòu)費(fèi)用