如果想不按照yii2默认规定的那些写接口来,如何重写或者自定义呢?
在yii\rest\ActiveController.php中
publicfunctionactions()
{
return[
'index'=> [
'class'=>'yii\rest\IndexAction',
'modelClass'=>$this->modelClass,
'checkAccess'=> [$this,'checkAccess'],
],
'view'=> [
'class'=>'yii\rest\ViewAction',
'modelClass'=>$this->modelClass,
'checkAccess'=> [$this,'checkAccess'],
],
'create'=> [
'class'=>'yii\rest\CreateAction',
'modelClass'=>$this->modelClass,
'checkAccess'=> [$this,'checkAccess'],
'scenario'=>$this->createScenario,
],
'update'=> [
'class'=>'yii\rest\UpdateAction',
'modelClass'=>$this->modelClass,
'checkAccess'=> [$this,'checkAccess'],
'scenario'=>$this->updateScenario,
],
'delete'=> [
'class'=>'yii\rest\DeleteAction',
'modelClass'=>$this->modelClass,
'checkAccess'=> [$this,'checkAccess'],
],
'options'=> [
'class'=>'yii\rest\OptionsAction',
],
];
}
这是默认的接口方法,那么如何重写呢?
我们可以在Controller中重写action()这个函数从而实现重写
namespace api\modules\v1\controllers;
useYii;
useyii\rest\ActiveController;
useyii\data\ActiveDataProvider;
useapi\models\Order;
classUsersControllerextendsActiveController {
public$modelClass='api\modules\v1\models\User';
publicfunctionactions() {
$actions= parent::actions();
// 禁用""index,delete" 和 "create" 操作
unset($actions['index'],$actions['delete'],$actions['create']);
return$actions;
}
//重写index的业务实现
publicfunctionactionIndex()
{
$modelClass=$this->modelClass;
returnnewActiveDataProvider([
'query'=>$modelClass::find()->asArray(),
'pagination'=> false
]);
}
}
a)因为访问的时候先去执行actions方法里面的对应独立操作,如果找不到再去找对应的内联操作。
b)actions方法的执行$actions = parent::actions();然后将$actions的需要重写的方法禁用(删除),然后return $actions 就没有这个方法了,所以就会执行内联操作actionIndex()这个方法,而我们的重写业务就是在这个actionIndex()方法中。其他的方法也是这样子重写。
如果我们想在自己定义不同的api接口方法呢?
那么我们可以通过配置实现,在main.php的主文件中
'urlManager'=> [
'enablePrettyUrl'=> true,
'showScriptName'=> false,
'rules'=> [
[
'class'=>'yii\rest\UrlRule',
'controller'=> ['v1/users'],
'pluralize'=> false,
'extraPatterns'=> [
'GET versions'=>'version',
'GET search/'=>'search',
'POST newusers'=>'add'
],
],
],
],
"extraPatterns"这个属性是额外模式配置
a)'GET versions' => 'version',代表获取接口版本,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/versions ,对应的内联操作actionVersion();
b)'GET searches/' => 'search', 代表搜索一个指定id的用户,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/searches/1,对应的内联操作actionSearches();
c)'POST newusers' => 'add',代表添加一个用户,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/newusers,对应的内联操作actionAdd(); 我们只需要在控制器中实现这些方法,完成相应的逻辑业务,那么各个需要的接口就完成了。