Yii 覆盖通用的 rest 函数


Yii Override Generic Rest Functions

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

始终可以通过在ActiveController类中定义 actions() 方法来重写原始行为。

下面是一个示例:

 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,
         ],
     ]);
 }

您可以定义自己的操作类、方案等。如果要覆盖某些操作(但不是全部(,请记住与 parent::actions() 合并。

编辑

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

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

除非社区有强烈需求,否则我不会将此类可调用变量的列表放在这里。要了解扩展 rest 操作行为需要填写的内容,请检查框架rest文件夹下的源代码:https://github.com/yiisoft/yii2/tree/master/framework/rest ;仅供参考,我还有另一个答案可以帮助您了解更多: Yii2 Restful API - 添加新操作的示例

我知道

这很老了,但我觉得这个问题与我回答的问题非常相似。值得在这里查看我的答案:https://stackoverflow.com/a/50744982/3337682

希望它对某人有所帮助。

~ 干杯:)