yii2.0.0RESTFUL風格下自定義view操作返回的數據

用YII2做RESTFUL風格的項目時對於有些view操作(請求單個資源的操作,即GET xxx.com/resouce/:id格式的操作),項目要求並不是簡單的使用model::findOne($id)查出來的數據就行了,但是如何自定義view的返回數據呢?

第一種方法顯而易見, override對應controller的actions(),把view操作的action的class指定成自己寫的viewAction:

public function actions(){
    $as = parent::actions();
    $as['view']['class'] = 'app\my_actions\viewAction'; //此viewAction繼承於yii\rest\viewAction,主要通過重寫run()函數實現自定義返回數據的功能
    return $as;
}

但是yii2的guide中說index操作可以通過指定parent::actions()['index']['prepareDataProvider'] = [$this, 'methodNameInController']的方法指定controller裏的函數來自定義返回的數據,那爲什麼view操作必須要新建一個類來自定義返回數據呢?有沒有更簡單的方法,像index那樣指定controller裏面的函數來完成自定義?有,但是參數名不再是prepareDataProvider了,而是findModel,用法和index一樣parent::actions()['view']['findModel'] = [$this, 'methodNameInController']即可.這裏要注意的是methodNameInController函數需要對查詢結果做個判斷,若查不出需要throw一個Exception對象,否則會返回一個空內容的response.

這裏吐槽下爲什麼index和view操作的自定義返回數據的參數不一樣,害得我走了很多彎路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章