Yii覆盖通用休息函数

Row*_*lor 3 php rest yii2

我是yii2的新手.我想在yii框架中写一些restful api.从3天的搜索,我能够运行宁静的服务示例.我发现yii自动生成这些方法的索引,查看,创建,更新,删除.如果我想自定义索引,创建,更新和删除方法,我该怎么办?因为我只找到了自定义indexData函数输出的方法,即prepareDataProvider.如果我添加新方法,我该怎么办?或者如果yii不提供create,update和delete方法的自定义,那么编写自己的自定义方法会更好.

Vic*_*ong 7

您始终可以通过actions()ActiveController类中定义方法来覆盖原始行为.

这是一个例子:

 public function actions()
 {
     return array_merge(parent::actions(), [
         'create' => null, // Disable create
         'view' => [
             'class' => 'yii\rest\ViewAction',
             'modelClass' => $this->modelClass,
             'checkAccess' => [$this, 'checkAccess'],
             'findModel' => ['\path\to\your\callback', 'findModelByYourOwnMethod'],
         ],
         'update' => [
             'class' => 'path\to\your\UpdateAction',
             'modelClass' => $this->modelClass,
             'checkAccess' => [$this, 'checkAccess'],
             'scenario' => SCENARIO_UPDATE,
         ],
     ]);
 }
Run Code Online (Sandbox Code Playgroud)

您可以定义自己的动作类,场景等.如果要覆盖某些但不是所有动作,请记住合并parent::actions().

编辑

通常,您可以通过1)声明方法在控制器中添加额外的操作actionX(),其中X是操作的名称; 和/或2)声明方法actions()返回动作配置数组,就像上面的例子一样.和Yii2框架提供了一个特殊的控制器,\yii\rest\ActiveController它提供了CRUD和索引执行的行动.

如果你阅读了源代码,你会注意到ActiveController,有一个actions()方法定义了类似于上面的例子.例如,每个动作都链接到class同一个包下'index' => ['class' => 'yii\rest\IndexAction'].每个操作中的实现都是不同的,其中一些提供了一个可选的可调用变量,供开发人员设置和覆盖原始行为.IndexAction例如,提供$prepareDataProvider;覆盖; 你可以从我的例子中看出,$findModel是另一个出现在每个休息动作中的.

除非社区有强烈需求,否则我不打算将此类可调用变量列表放在此处.要了解什么是需要填补,以延长其余的动作行为,请查看下的源代码rest框架的文件夹:https://github.com/yiisoft/yii2/tree/master/framework/rest ; 还有,我还有另一个答案可以帮助你理解更多:Yii2 Restful API - 添加新动作的示例