yii 2 api開発の段階化
4889 ワード
一、idを関連テーブルのフィールドに変換する方法
モデルクラスのfieldsメソッドまたはextraFieldsメソッドを書き換え、必要に応じてフィールドとフィールドの値を設定します.これにより、yiirestSerializerが変換した配列が必要なデータになります.
A.クライアントから送信されたapi要求アドレスにおいて、fieldsパラメータにより必要なフィールドを指定する.B、fieldsメソッドを書き換えて必要なフィールドを指定し、フィールド名をカスタマイズすることもできます.C.fieldsメソッドでは、フィールドの値を匿名関数でカスタマイズします.D、extrafieldsを書き換える方法でフィールドをカスタマイズする
E、unsetで表示されないフィールドを削除します.
F、リンクHATEOAS、データモデルでgetlinksメソッドを定義する
二、改ページのカスタマイズ方法
三、キーワードに基づいて文章を検索する
サービス側:AticleController.php
サービス・エンドphp
クライアント:
四、どのようにカスタムリソースを実現して対外的にインタフェースサービスを提供するか
urlルールの構成
クライアントコード
モデルクラスのfieldsメソッドまたはextraFieldsメソッドを書き換え、必要に応じてフィールドとフィールドの値を設定します.これにより、yiirestSerializerが変換した配列が必要なデータになります.
A.クライアントから送信されたapi要求アドレスにおいて、fieldsパラメータにより必要なフィールドを指定する.B、fieldsメソッドを書き換えて必要なフィールドを指定し、フィールド名をカスタマイズすることもできます.C.fieldsメソッドでは、フィールドの値を匿名関数でカスタマイズします.D、extrafieldsを書き換える方法でフィールドをカスタマイズする
E、unsetで表示されないフィールドを削除します.
F、リンクHATEOAS、データモデルでgetlinksメソッドを定義する
'content',
'status'=>function($model){
return $model->status==self::STATUS_DRAFT?" ":' ';
},
'createdBy'=>function($model){
return $model->createdBy->realname;
}
]
}
/*
$fields = parent::fields();
unset($fields['created_at']);
return $fields;
*/
public function getLinks(){
return[
Link::REL_SELF => Url::to(['article/view','id'=>$this->id],true),
'edit'=>Url::to(['article/update','id'=>$this->id], true), //
'index'=>Url::to(['articles'],true), //
];
}
}
二、改ページのカスタマイズ方法
namespace api\controllers;
use yii\rest\ActiveController;
use yii\data\ActiveDataProvider;
use common\models\Article;
class ArticleController extends ActiveConroller\
{
public $modelClass = 'common\models\Article';
public function actions(){
$actions = parent::actions();
unset($actions['index']);
return $actions;
}
public function actionIndex(){
$modelClass = $this->modelClass;
return new ActiveDataProvider(
[
'query'=>$modelClass::find()->asArray(),
'pagination'=>['pageSize'=>5],
]
)
}
}
三、キーワードに基づいて文章を検索する
サービス側:AticleController.php
public function actionSearch(){
return Article::find()->where(['like', 'title', $_POST['keyword']])->all();
}
サービス・エンドphp
'urlManager'=>[
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' =>[
['class' => 'yii\rest\UrlRule',
'controller'= 'article',
'ruleConfig'=>[
'class'=>'yii\web\UrlRule',
'defaults'=>[
'expand'=>'createdBy',
]
],
'extraPatterns'=>[
'POST search' => 'search'
],
]
]
]
クライアント:
bindSearchTap: function(){
var page = this;
wx.request({
url: 'http://api.apitpl.dev/articles/search',
header:{
'Content-Type':'application/x-www-form-urlencoded'
},
method: 'POST',
data:{
keyword:' '
}
success:function(res.data){
console.log(res.data)
}
})
},
四、どのようにカスタムリソースを実現して対外的にインタフェースサービスを提供するか
namespace api\controllers;
use yii\rest\Controller;
use common\models\Article;
use yii\db\Query;
class Top10Contrller extends Controller{
public function actionIndex(){
$top10 = (new Query())
->from('article')
->select(['created_by', 'Count(id) as creatercount'])
->groupBy(['created_by'])
->orderBy('creatercount')
->limit(10)
->all();
return $top10;
}
}
urlルールの構成
'urlManager'=>[
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' =>[
['class' => 'yii\rest\UrlRule',
'controller'= 'article',
'ruleConfig'=>[
'class'=>'yii\web\UrlRule',
'defaults'=>[
'expand'=>'createdBy',
]
],
'extraPatterns'=>[
'POST search' => 'search'
],
['class'=>'yii\rest\UrlRule', //
'controller'=>'top10',
'pluralize'=>false, //top10 ,
'except' =>['delete','create','update','view'], // http
],
]
]
]
クライアントコード
bindTop10Tap: function(){
var page = this;
wx.request({
url: 'http://api.apitpl.dev/top10',
header:{
'Content-Type':'application/json'
},
success:function(res.data){
console.log(res.data)
}
})
},