說干咱就干,老沙灰常高興的開始了,在這一篇老沙將帶著你完成yii2程序的restful配置過程。 RESTful 老沙計劃使用 xgh.nai8.me/xcx 作為接口的基本地址,將來會有比如 GET xgh.nai8.me/xcx/albums GET xgh.nai8.me ...
說干咱就干,老沙灰常高興的開始了,在這一篇老沙將帶著你完成yii2程序的restful配置過程。
老沙計劃使用 xgh.nai8.me/xcx 作為接口的基本地址,將來會有比如
類似的url,這樣是符合restful。
為了以后版本化,將每個版本的接口以模塊的形式建立,當然建立支持restful和建立普通的模塊并沒有差別,使用gii的模塊生成即可。
此處省略好幾個字,模塊建立完成。
yii2框架內(nèi)置是支持restful規(guī)范的,按照yii2的規(guī)則做我們可以輕松實現(xiàn)比如數(shù)據(jù)表數(shù)據(jù)的獲取、插入、更新、刪除等基礎(chǔ)操作以及登錄驗證等功能。
也就是說我省了很多事情~~,當然我們還是需要簡單配置的,這個配置主要是urlManager及模塊控制器的繼承問題。
如果要實現(xiàn)上面的url樣子,我們必須進行url美化,這需要web服務(wù)器的支持(apache&nginx如何支持url重寫可以參考 速查表),單單這樣還不夠,yii2提供了restful專有的url規(guī)范,需要按照它的要求配置。
對于一般的restful規(guī)則的yii2路由配置如下圖
紅色框內(nèi)的代表一個標準restful中控制器路由規(guī)則,綠色框內(nèi)是你必須要填寫的,其他的except、pluralize、extraPatterns非必填,具體使用場景以后用到會說明。
這里要說明的參數(shù)是pluralize,在restful使用上一直存在兩種觀點,就是對于資源在url上的表現(xiàn)應(yīng)該是單數(shù)還是復(fù)數(shù)問題,yii2默認是復(fù)數(shù)形式,如果你想使用單數(shù)可以將pluralize設(shè)置為false即可。
在pluralize=false的情況下url是類似于 GET xgh.nai8.me/xcx/album 的樣子。
在我們設(shè)置了urlManager后,yii2就變得智商滿滿了,當過來一個 GET xgh.nai8.me/xcx/albums 請求后,yii2知道這是一個要獲取資源結(jié)果集的請求,則會去調(diào)用xcx模塊下的album控制器的actionIndex,以此類推yii2提供了很多個內(nèi)置的action識別,具體見下圖
當然具體如何實現(xiàn)的你可以參考 yii\rest\UrlRule.php 類及yii2的actions函數(shù)。
小提示:在兄弟連PHP原創(chuàng)視頻中對這個原理也進行了詳細的解析(《Yii2的RESTful講解》第三節(jié))
urlManager配置完成,接下來就是寫一個控制器了,老沙對此很熟悉,不就是一個繼承問題么?。?!
是的,這是一個繼承問題,如果你想讓yii2支持restful,請將對應(yīng)控制器繼承到 yii\rest\ActiveController 上,最簡單的一個具有restful資源操作能力的控制器如下圖。
是的,就是這樣,當控制器繼承于 ActiveController 在指定一個$modelClass后,這個控制器就可以對 $modelClass 對應(yīng)的數(shù)據(jù)表進行列表、詳情、生成、更新、刪除等操作,而你無需再寫任何對應(yīng)代碼,簡單吧~~
這里要注意幾點
第一:
必須指定$modelClass,每個控制器代表一種資源,隱身就是一個數(shù)據(jù)表中的數(shù)據(jù)或你操作系統(tǒng)的文件云云,總之它是一種資源。
第二:
這里的AblumController就是urlMananger中的'controller' => 'xcx/album', 控制器的名字于單復(fù)數(shù)的設(shè)置無關(guān)。
簡單配置后,老沙搞定了服務(wù)器端的配置,接下來他計劃使用小程序和yii2實現(xiàn)一個隊相冊列表的功能實現(xiàn),下一篇告訴你。
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)