PHP - Hush Framework 學(xué)習(xí)記錄

PHP

目錄

1舷嗡、PHP 語言的介紹(面向?qū)ο筇瑂ession,MVC 模式)

2、RESTful API 介紹及通信協(xié)議制定

3狸棍、服務(wù)端結(jié)構(gòu)介紹

4、接口程序的介紹

參考資料

《Android 和 PHP 開發(fā)最佳實(shí)踐》

《理解 RESTful 架構(gòu)》 阮一峰

PHP 語言介紹

PHP(外文名:PHP: Hypertext Preprocessor味悄,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言草戈。語法吸收了C語言、Java和Perl的特點(diǎn)侍瑟,利于學(xué)習(xí)唐片,使用廣泛,主要適用于Web開發(fā)領(lǐng)域涨颜。PHP 獨(dú)特的語法混合了C费韭、Java、Perl以及PHP自創(chuàng)的語法庭瑰。它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁星持。用PHP做出的動態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)文檔中去執(zhí)行弹灭,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多督暂;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行穷吮,使代碼運(yùn)行更快逻翁。

1、用于后臺腳本編程捡鱼,即以命令行(CLI)的方式運(yùn)行

2八回、用于網(wǎng)絡(luò)編程,即以 mod_php 或 fastCGI 的方式執(zhí)行

什么是 CLI

PHP 的命令行模式驾诈,用作 PHP 開發(fā)外殼應(yīng)用

什么是 mod_php

簡單來說缠诅,PHP 使用這種模式讓 PHP 代碼可以在 Apache 服務(wù)器上面運(yùn)行。

什么是 fastCGI

CGI(Common Gateway Interface) 是一種外部應(yīng)用程序(CGI程序)與Web服務(wù)器的協(xié)議乍迄,CGI是為了保證Server傳遞過來的數(shù)據(jù)是標(biāo)準(zhǔn)格式滴铅,

CGI(Common Gateway Interface) 是WWW技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位就乓。

CGI全稱是“公共網(wǎng)關(guān)接口”(Common Gateway Interface)汉匙,HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上生蚁。

fastCGI 則可以看作是升級版的噩翠、常駐(long-live)的CGI。

PHP 面向?qū)ο箝_發(fā)

面向?qū)ο?/h3>

PHP 語言的面向?qū)ο缶幊趟悸放c其他語言都是非常相似的邦投,對象(Object)伤锚、類(Class)、接口(Interface)以及 MVC 三層封裝的用法都大同小異志衣。

1屯援、抽象性

對象是面向?qū)ο缶幊痰幕驹孛兔牵瑢ο罂梢允俏覀冄芯康娜魏卧兀梢允蔷唧w的物品狞洋,也可以是抽象的事物弯淘。比如后臺管理系統(tǒng),管理員是一個(gè)對象吉懊,后臺權(quán)限也是一個(gè)對象庐橙。

2、繼承性

繼承性是面向?qū)ο笾凶罨A(chǔ)借嗽、最重要的特點(diǎn)之一态鳖,也正是因?yàn)閷ο蟮睦^承性才衍生出了“抽象”和“封裝”等面向?qū)ο蟮脑O(shè)計(jì)方法。 PHP 語言中同樣使用私有(private)恶导、保護(hù)(protected)浆竭、公共(public)關(guān)鍵字來設(shè)定類、屬性惨寿、方法的權(quán)限兆蕉。

3、多態(tài)性

多態(tài)性泛指相同的操作或函數(shù)缤沦、過程中可作用于多種類型的對象上并獲得不同的結(jié)果虎韵。這個(gè)特性進(jìn)一步增強(qiáng)了面向?qū)ο蟮木幊趟枷氲撵`活與重用。

class a{
    function test($i){ // $i可以是任何類型的變量
        print_r $i;
    }
}

上例缸废,可以看出由于PHP是弱類型語言包蓝,所以$i可以是任何類型的變量,這樣一個(gè)函數(shù)就可以實(shí)現(xiàn)如java等強(qiáng)類型語言中靠改變參數(shù)類型重載方法的多態(tài)形式企量。

PHP 中的 Session

常說 “不理解會話(session)的概念就等于不懂得 PHP 網(wǎng)絡(luò)編程”测萎。當(dāng)然,這里說的 PHP 用于網(wǎng)絡(luò)編程的時(shí)候届巩,因?yàn)?HTTP 協(xié)議是無狀態(tài)的硅瞧,所以每次請求結(jié)束之后,變量和資源就回收了恕汇,那么我們?nèi)绾伪4嬉恍俺志谩钡男畔⒛赝筮螅勘热纾河脩舻卿浿螅到y(tǒng)需要把用戶登錄的信息保存下來瘾英,在整個(gè)應(yīng)用或者站點(diǎn)里面使用枣接。如果使用數(shù)據(jù)庫來保存,就會很麻煩而且浪費(fèi)資源缺谴,而且又多了很多讀寫操作但惶,還要定期清理。而且大部分屬于臨時(shí)數(shù)據(jù),用戶退出登錄就沒有了膀曾,為了解決這些問題县爬,PHP提供了會話模塊,來保存這些臨時(shí)的用戶數(shù)據(jù)添谊。

PHP的session機(jī)制不復(fù)雜财喳,客戶端只需要保存一個(gè)Session ID(會話ID),每次會話請求都會把這個(gè) Session ID 傳給服務(wù)端碉钠,并獲取服務(wù)端接口處理完數(shù)據(jù)纲缓。

PHP 默認(rèn)的會話存儲方法是文件存儲卷拘,數(shù)據(jù)都會被保存到服務(wù)器本地的 session.save_path 參數(shù)設(shè)定的目錄中喊废。

最簡單的具體的使用方法:

首先調(diào)用 session_start 方法開啟一個(gè)新的 session。然后直接使用 PHP 預(yù)定義變量 $_ SESSION 來進(jìn)行讀取和存儲操作栗弟,在請求結(jié)束時(shí)系統(tǒng)會把修改過的會話值保存到存儲器中污筷。

如果多臺服務(wù)器要共享 session,則需要把 session 集中存儲在某個(gè)公用的中間件乍赫,PHP 的 seesion API 可以供我們控制 Session 存儲方式瓣蛀。

MVC 模式

0、 什么是 MVC

MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構(gòu)模式雷厂,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)惋增、視圖(View)和控制器(Controller)。

PHP中MVC模式也稱Web MVC改鲫,從上世紀(jì)70年代進(jìn)化而來诈皿。MVC的目的是實(shí)現(xiàn)一種動態(tài)的程序設(shè)計(jì),便于后續(xù)對程序的修改和擴(kuò)展簡化像棘,并且使程序某一部分的重復(fù)利用成為可能稽亏。除此之外,此模式通過對復(fù)雜度的簡化缕题,使程序結(jié)構(gòu)更加直觀截歉。

1、MVC各部分的職能:

模型Model – 管理大部分的業(yè)務(wù)邏輯和所有的數(shù)據(jù)庫邏輯烟零。模型提供了連接和操作數(shù)據(jù)庫的抽象層瘪松。
控制器Controller - 負(fù)責(zé)響應(yīng)用戶請求、準(zhǔn)備數(shù)據(jù)锨阿,以及決定如何展示數(shù)據(jù)凉逛。
視圖View – 負(fù)責(zé)渲染數(shù)據(jù),通過HTML方式呈現(xiàn)給用戶群井。

一個(gè)典型的Web MVC流程:

Controller截獲用戶發(fā)出的請求状飞;

Controller調(diào)用Model完成狀態(tài)的讀寫操作;

Controller把數(shù)據(jù)傳遞給View;

View渲染最終結(jié)果并呈獻(xiàn)給用戶

協(xié)議制定

RESTful

RESTful架構(gòu)诬辈,就是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)酵使。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)焙糟、易于理解口渔、擴(kuò)展方便,所以正得到越來越多網(wǎng)站的采用穿撮。

1缺脉、名稱:

REST,即Representational State Transfer的縮寫悦穿,”表現(xiàn)層狀態(tài)轉(zhuǎn)化“

2攻礼、資源(Resources):

REST的名稱"表現(xiàn)層狀態(tài)轉(zhuǎn)化"中,省略了主語栗柒。"表現(xiàn)層"其實(shí)指的是"資源"(Resources)的"表現(xiàn)層"礁扮。
所謂"資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體瞬沦,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息太伊。它可以是一段文本、一張圖片逛钻、一首歌曲僚焦、一種服務(wù),總之就是一個(gè)具體的實(shí)在曙痘。你可以用一個(gè)URI(統(tǒng)一資源定位符)指向它芳悲,每種資源對應(yīng)一個(gè)特定的URI。要獲取這個(gè)資源屡江,訪問它的URI就可以芭概,因此URI就成了每一個(gè)資源的地址或獨(dú)一無二的識別符。

總結(jié):所謂 "上網(wǎng) "惩嘉,就是與互聯(lián)網(wǎng)上一系列的"資源"互動罢洲,調(diào)用它的URI。

3文黎、表現(xiàn)層(Representation):

"資源"是一種信息實(shí)體惹苗,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式耸峭,叫做它的"表現(xiàn)層"(Representation)桩蓉。

比如,文本可以用txt格式表現(xiàn)劳闹,也可以用HTML格式院究、XML格式洽瞬、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式业汰;圖片可以用JPG格式表現(xiàn)伙窃,也可以用PNG格式表現(xiàn)。

URI只代表資源的實(shí)體样漆,不代表它的形式为障。嚴(yán)格地說,有些網(wǎng)址最后的".html"后綴名是不必要的放祟,因?yàn)檫@個(gè)后綴名表示格式鳍怨,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置跪妥。它的具體表現(xiàn)形式鞋喇,應(yīng)該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對"表現(xiàn)層"的描述骗奖。

總結(jié):“資源”可以用多種形式表現(xiàn)(一個(gè)文本可以用 txt确徙、HTML醒串、XML执桌、JSON 這些格式來表現(xiàn))

4、狀態(tài)轉(zhuǎn)化(State Transfer):

訪問一個(gè)網(wǎng)站芜赌,就代表了客戶端和服務(wù)器的一個(gè)互動過程仰挣。在這個(gè)過程中,勢必涉及到數(shù)據(jù)和狀態(tài)的變化缠沈。
互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議膘壶,是一個(gè)無狀態(tài)協(xié)議。這意味著洲愤,所有的狀態(tài)都保存在服務(wù)器端颓芭。因此,如果客戶端想要操作服務(wù)器柬赐,必須通過某種手段亡问,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的肛宋,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"州藕。
客戶端用到的手段,只能是HTTP協(xié)議酝陈。具體來說床玻,就是HTTP協(xié)議里面,四個(gè)表示操作方式的動詞:GET沉帮、POST锈死、PUT贫堰、DELETE。它們分別對應(yīng)四種基本操作:GET用來獲取資源待牵,POST用來新建資源(也可以用于更新資源)严嗜,PUT用來更新資源,DELETE用來刪除資源洲敢。

總結(jié):客戶端通過四個(gè)HTTP動詞漫玄,對服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"压彭。

客戶端訪問服務(wù)器時(shí)睦优,根據(jù) URI 訪問到信息實(shí)體(各種文字、圖片壮不、視頻)汗盘,客戶端通過四個(gè)HTTP動詞跃惫,對服務(wù)器端資源進(jìn)行操作磁浇,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"

5、綜述

(1)每一個(gè)URI代表一種資源肚菠;

(2)客戶端和服務(wù)器之間健蕊,傳遞這種資源的某種表現(xiàn)層菱阵;

(3)客戶端通過四個(gè)HTTP動詞,對服務(wù)器端資源進(jìn)行操作缩功,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"晴及。
例子:https://www.baidu.com/img/bd_logo1.png

協(xié)議制定

0、設(shè)計(jì)原則

通用性

簡潔性

統(tǒng)一

1嫡锌、通信協(xié)議定義

協(xié)議的設(shè)計(jì)是一門藝術(shù)虑稼,既不能太復(fù)雜,也不能太簡單势木;太復(fù)雜的話則效率低蛛倦,太簡單則不可以滿足需求。之所以選擇 JSON 協(xié)議作為微博通信協(xié)議的基礎(chǔ)啦桌,就是因?yàn)?JSON 協(xié)議的簡便特性溯壶;當(dāng)然,我們還需要通過設(shè)計(jì)和加工震蒋,把協(xié)議制定的更加合理茸塞。

基礎(chǔ)協(xié)議框架

{
    "code" : "正確和錯(cuò)誤的代碼",
    "message" : "提示信息",
    "result" : "返回內(nèi)容"
    
}

(1)返回單個(gè)對象數(shù)據(jù)

"result" : {
    "模型名" : {key : value, key : value ... }
}

以上情況適用于僅返回單個(gè)模型的情景,比如在用戶個(gè)人信息界面查剖,我們只需要獲取單個(gè)用戶的個(gè)人信息钾虐,那么我們就可以使用這種數(shù)據(jù)的構(gòu)造形式。

(2)返回對象數(shù)組數(shù)據(jù)

"result" : {
    "模型名.list" : [
        {key : value, key : value ...},
        {key : value, key : value ...},
        ...
    ]

}

以上的數(shù)據(jù)格式適用于返回一個(gè)模型列表的情景笋庄,比如在微博列表的界面中效扫,我們需要讀取最新若干條微博信息倔监,則可采用這種數(shù)組形式的數(shù)據(jù)來返回多個(gè)模型的數(shù)據(jù)。

(3)返回混合模式數(shù)據(jù)

"result" : {
"模型名" : { ...},
"模型名.list" : { ...}
}

以上情況適用于比較復(fù)雜的組合型界面菌仁,在這種模式下浩习,服務(wù)端APadliI可以同時(shí)返回單個(gè)模型數(shù)據(jù)和模型列表格式的數(shù)據(jù)

服務(wù)端所做的事情,就是把邏輯運(yùn)算的結(jié)果按照協(xié)議制定好的格式把數(shù)據(jù)展示給客戶端济丘。

微博實(shí)例整體結(jié)構(gòu)介紹:

weibo

客戶端:

服務(wù)端:HTTP API 接口和 MySQL 數(shù)據(jù)庫之間有一個(gè) “API Debug 后臺”谱秽,這個(gè)組件是我們用來調(diào)試服務(wù)端的 API 接口用的,因?yàn)樵诜?wù)端和客戶端并行開發(fā)的過程中我們不可能使用客戶端來調(diào)試服務(wù)端的 API 接口摹迷,這樣子可以降低調(diào)試服務(wù)端邏輯的困難疟赊。

服務(wù)端架構(gòu)介紹 PHP + MySQL

1、 App MVC

見“接口程序的開發(fā)”

2峡碉、App‘s Library

本層是應(yīng)用程序(App)的類庫層近哟,App MVC 層的邏輯代碼是建立在這個(gè)層次之上的。
好處有二:

(1)簡化開發(fā)鲫寄,重復(fù)編碼可以抽象到一起吉执。

(2)加強(qiáng)對重點(diǎn)邏輯的控制,重復(fù)邏輯提取出來寫入一個(gè)方法里地来,在需要用的地方再調(diào)用戳玫。

3、Hush Framwwork

Hush Framwwork 是一個(gè)PHP框架靠抑,微博實(shí)例的服務(wù)端就是 Hush Framwwork 框架的基礎(chǔ)上開發(fā)的量九,包括(Library)

Hush Framework 處理流程一般步驟:

步驟1: 首先适掰,Hush Framework 的請求分發(fā)器(Dispatcher)會分析客戶端發(fā)送過來的 HTTP 請求所包含的信息颂碧,并根據(jù)請求的 URL 地址來指定使用相應(yīng)的控制器 (Controller)來處理該請求。

步驟2:接著类浪,被指定的控制器會選擇合適的模型類(Model)用于持久層數(shù)據(jù)的獲取和存儲载城,并負(fù)責(zé)處理該請求的業(yè)務(wù)邏輯。此外费就,我們可以看到 Hush Framework 的模型層是基于 Zend Framework 的模型層的诉瓦。在邏輯處理完成后,控制器還會調(diào)用視圖層(View)來組合最終的 HTML 代碼力细。

步驟3:最后睬澡,服務(wù)器會把 Hush Framework 的處理結(jié)果通過 HTTP 協(xié)議返回給客戶端程序來進(jìn)行后續(xù)的處理。

4眠蚂、Zend Framework 框架 和 Smarty 模版

Zend Framework 是官方的 PHP 框架煞聪,適合二次開發(fā),功能強(qiáng)大逝慧。

Smarty 模版

  • PHP 語言本身可以嵌入到 HTML 頁面中進(jìn)行數(shù)據(jù)展現(xiàn)昔脯,所以就要寫很多<?php ?> 標(biāo)簽啄糙,這樣就會造成大量的冗余代碼,不利于解耦和分離云稚。所以隧饼,在項(xiàng)目中,需要有一個(gè)專門的模版引擎静陈。

接口程序開發(fā)

服務(wù)端代碼基本目錄結(jié)構(gòu)

核心類庫分析


1燕雁、Demos_App

控制整個(gè)服務(wù)端應(yīng)用邏輯的基類,一般來說都是供給應(yīng)用的入口程序所使用鲸拥,屬于 MVC 層之上的“總控制層”贵白。下面會詳細(xì)講

2、Demos_App_Server

是所有API接口以及調(diào)試接口的基類崩泡,是MVC層中最核心的一部分禁荒。參考該類的主要代碼(lib/Demos/App/Server.php)

回調(diào)方法

此類型的函數(shù)包括 __init() 初始化毀掉方法和 __done() 銷毀回調(diào)方法,在本基類中這兩個(gè)方法分別負(fù)責(zé)的是控制器在 “類對象初始化” 和 “類對象銷毀” 兩個(gè)階段所要做的事情角撞。

公用方法

比如 forward 路徑跳轉(zhuǎn)方法以及 render 結(jié)果打印方法等呛伴。

3、Demos_Cli

用于處理擴(kuò)展腳本 Cli 編程

4谒所、Demos_Dao

數(shù)據(jù)庫操作對象(DAO)热康,作為 MVC 三層中最接近數(shù)據(jù)的一層,本示例的代碼如下:

    public static function load ($class_name)
    {
        static $_model = array();
        if(!isset($_model[$class_name])) {
            require_once 'Demos/Dao/' . str_replace('_', '/', $class_name) . '.php';
            $_model[$class_name] = new $class_name();
        }
        return $_model[$class_name];
    }   

解釋:一個(gè)靜態(tài)方法load用于加載對應(yīng)目錄下的 DAO 類劣领,用于構(gòu)造數(shù)據(jù)庫表的 DAO 對象

5姐军、Demos_Dao_Core

Demos_Dao_Core 類同樣也屬于 MVC 三層中的 Model 層的部分,它繼承自 Demos_Dao 類尖淘,也是 Hush_Db_Dao 的子類

class Demos_Dao_Core extends Demos_Dao
{
    /**
     * @static
     */
    const DB_NAME = 'demos_core';
    
    /**
     * Construct
     */
    public function __construct ()
    {
        // initialize dao
        parent::__construct(MysqlConfig::getInstance());
        
        // set default dao settings
        $this->_bindDb(self::DB_NAME);
    }
}

解釋:DAO 的基類奕锌,項(xiàng)目中用到的所有的 DAO 類都將繼承此類,大部份的 DAO 類中所使用的方法都已經(jīng)被 Hush Framework 框架封裝到了 Hush_DB_Dao 類中村生。常見的數(shù)據(jù)庫操作方法(增惊暴、刪、改趁桃、查)

6辽话、Demos_Util

應(yīng)用框架的工具類

Hush Framework 的 MVC 分層思路

1、 控制器 (Controller)
控制器簡單來說就是頁面的邏輯卫病,在 Hush Framework 中我們通常用 Page(頁面)來表示通常意義的 Controller油啤,網(wǎng)絡(luò)應(yīng)用 Page 比較好理解。

HF 使用的是 REST 格式的 URL 路徑結(jié)構(gòu),自域名之后的 URL 路徑第一個(gè)表示的是控制器的名稱蟀苛,第二個(gè)則是表示控制器的動作益咬,也就是我們通常稱的 Action,比如登陸界面的路徑為 “/auth/” ,其對應(yīng)的邏輯就可以在 AuthPage.php 文件中的 AuthPage 類的 indexAction 方法中找到屹逛,這里需要注意的是當(dāng)前的路徑如果為空础废,我們則會用 index 來替代汛骂。

關(guān)于接口的 Session

微博應(yīng)用中的大部分的 API 接口都是要求用戶登錄的,所以就用到了 Session 會話评腺,對于接口 API 來說帘瞭,Session ID 是通過 URL 傳遞的.

DebugServer.php

$configList['action'] = $this->url->format($configList['action']);

這條語句的作用就是把 Session ID 通過 sid 參數(shù)附加到 URL 地址中來進(jìn)行傳遞。

下面開始在代碼上的一些流程,以登錄接口為例 :

入口類 server/www/index.php


<?php
require_once '../../etc/app.config.php';
require_once 'Demos/App.php';

$app = new Demos_App();

// 配置應(yīng)用重要參數(shù)
// addAppDir 添加飲用的控制器類庫目錄蒿讥,此函數(shù)可以被多次調(diào)用蝶念,每次添加一個(gè)類庫目錄,比如在本應(yīng)用中就有 API 接口(Server) 和 網(wǎng)頁應(yīng)用(Website)兩種控制器的目錄芋绸,我們都在index.php 中進(jìn)行設(shè)置
$app->setErrorPage('./404.php')
    ->addMapFile(__MAP_INI_FILE)
    ->addAppDir(__LIB_PATH_SERVER)
    ->addAppDir(__LIB_PATH_WEBSITE);

// 將所有的調(diào)試信息和錯(cuò)誤打印關(guān)閉媒殉,建議在正式環(huán)境關(guān)閉
$app->setDebug(true);

// 設(shè)置Controller類的類名后綴,使用run方法打開應(yīng)用程序的運(yùn)行邏輯摔敛,否則頁面時(shí)不會被執(zhí)行的
$app->run(array(
    'defaultClassSuffix' => 'Server'
));

解釋:代碼邏輯的最全面初始化了一個(gè) Demos_App 對象廷蓉,此對象就是整個(gè)應(yīng)用程序的基類。然后马昙,配置了 404 頁面桃犬、路徑映射文件(用于設(shè)定 URL 路由)以及兩個(gè)控制器類庫的路徑,這些都是應(yīng)用程序的必要配置行楞。常量值配置在(etc/app.config.php )

/**
 * App definitions
 */
define('__APP_NAME', 'Demos');
define('__APP_VERSION', '1.0');

/**
 * URL relative constants
 */
define('__HOST_SERVER', 'http://127.0.0.1:8001');
define('__HOST_WEBSITE', 'http://127.0.0.1:8002');

/**
 * MVC url mapping ini file
 */
define('__MAP_INI_FILE', realpath(__ETC . '/app.mapping.ini'));

選取有代表性的微博接口演示:

登陸接口 (http://127.0.0.1:8001/index/login

代碼路徑:lib/Demos/App/Server/IndexServer.php

loginAction 接口方法對應(yīng)的是 /index/login 的接口地址攒暇,該接口地址會接受從客戶端的登陸界面發(fā)來的請求,進(jìn)而完成服務(wù)端的登陸動作子房。實(shí)際上形用,后面所有的服務(wù)端接口都是這樣使用的。

    public function loginAction ()
    {
        // return login customer
        $name = $this->param('name');
        $pass = $this->param('pass');
        if ($name && $pass) {
            $customerDao = $this->dao->load('Core_Customer');
            $customer = $customerDao->doAuth($name, $pass);
            if ($customer) {
                $customer['sid'] = session_id();
                $_SESSION['customer'] = $customer;
                $this->render('10000', 'Login ok', array(
                    'Customer' => $customer
                ));
            }
        }
        // return sid only for client
        $customer = array('sid' => session_id());
        $this->render('14001', 'Login failed', array(
            'Customer' => $customer
        ));
    }

首先使用 param 方法傳入的用戶名(name)和密碼(pass)參數(shù)证杭,然后調(diào)用 Core_Customer 類中的 doAuth 用戶驗(yàn)證方法進(jìn)行處理田度,如果驗(yàn)證成功就把用戶信息放入到 Session 會話中。并且返回登錄成功躯砰,否則失敗每币。

調(diào)用的 doAuth 方法的邏輯就是根據(jù)用戶名和密碼到數(shù)據(jù)表中查找用戶的信息,如果有則返回用戶信息琢歇,若查不到就返回 false。

dbr: db read 的縮寫梦鉴,代表讀庫李茫。
dbw: db write 的縮寫,代表寫庫肥橙。
fetchRow :查找單行魄宏,使用該方法進(jìn)行單行查詢,比如查詢某哥用戶的信息存筏。查詢成功則返回多行的用戶數(shù)據(jù)(默認(rèn)二維數(shù)據(jù))宠互,失敗則返回False味榛。

程序最后都會使用render方法打印 JSON 格式的消息數(shù)據(jù)。該方法有3個(gè)參數(shù)予跌,分別是微博通信協(xié)議中的 code搏色、message、和 result信息券册。

微信小程序樣例

小程序開發(fā)框架的目標(biāo)是通過盡可能簡單频轿、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 APP 體驗(yàn)的服務(wù)。

框架提供了自己的視圖層描述語言 WXML 和 WXSS烁焙,以及基于 JavaScript 的邏輯層框架航邢,并在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),可以讓開發(fā)者可以方便的聚焦于數(shù)據(jù)與邏輯上骄蝇。

下面通過一個(gè)簡單的例子來測試一下登錄接口膳殷。提供真實(shí)的使用場景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市九火,隨后出現(xiàn)的幾起案子秽之,更是在濱河造成了極大的恐慌,老刑警劉巖吃既,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考榨,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹦倚,警方通過查閱死者的電腦和手機(jī)河质,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來震叙,“玉大人掀鹅,你說我怎么就攤上這事∶铰ィ” “怎么了乐尊?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長划址。 經(jīng)常有香客問我扔嵌,道長,這世上最難降的妖魔是什么夺颤? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任痢缎,我火速辦了婚禮,結(jié)果婚禮上世澜,老公的妹妹穿的比我還像新娘独旷。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布嵌洼。 她就那樣靜靜地躺著案疲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪麻养。 梳的紋絲不亂的頭發(fā)上褐啡,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音回溺,去河邊找鬼春贸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遗遵,可吹牛的內(nèi)容都是我干的萍恕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼车要,長吁一口氣:“原來是場噩夢啊……” “哼允粤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起翼岁,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤类垫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后琅坡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悉患,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年榆俺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了售躁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茴晋,死狀恐怖陪捷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诺擅,我是刑警寧澤市袖,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站烁涌,受9級特大地震影響苍碟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烹玉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一驰怎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧二打,春花似錦、人聲如沸掂榔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑞信,卻和暖如春厉颤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凡简。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工逼友, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秤涩。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓帜乞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筐眷。 傳聞我的和親對象是個(gè)殘疾皇子黎烈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)匀谣,斷路器照棋,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Php:腳本語言,網(wǎng)站建設(shè)武翎,服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語言,是一種簡單的烈炭、面向?qū)ο?..
    廖馬兒閱讀 2,137評論 2 38
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司宝恶,掛了不少符隙,但最終還是拿到小米、百度卑惜、阿里膏执、京東、新浪露久、CVTE更米、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,246評論 11 349
  • stackoverflow 在vim類的問題里,有超過100萬次提問是關(guān)于毫痕,如何退出vim征峦,哈哈。要高效的使用vi...
    好好編程閱讀 584評論 0 3