我是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
希望它对某人有所帮助。
~ 干杯:)