gpt4 book ai didi

rest - Yii2 在 Rest ActiveController 中覆盖通用创建操作

转载 作者:行者123 更新时间:2023-12-03 14:34:37 26 4
gpt4 key购买 nike

我在 Yii2 中有一个 Rest API,Yii 生成所有 Action

查看/更新/创建/删除

我想改变 createMethode et garde 的其他方法,所以我不能使用类 Controller,我应该使用类 ActiveController

但是我希望那个类做同样的工作,我需要在创建之前添加一些 Action ,在创建之后添加一些 Action 。所以我需要覆盖 actionCreate

我该怎么做 ?

最佳答案

我知道这是一个老问题;但我在相关搜索中找到了它,并认为我可以提供一个很好的、更新的解决方案和现在的内容摘要。希望有人觉得这有帮助......

我知道有两种方法可以做到这一点。您可以定义一个 Action 方法,就像提到的@Roman Podlinov,或者您可以将 Action 定义为一个单独的类并将默认的创建 Action 指向它,接近@mrJ0ul3 提到的。为了完整起见,我将在下面提供两者的示例。

方法 1 - Controller 中的操作方法

在 Controller 中,覆盖 actions像这样的方法:

public function actions()
{
$actions = parent::actions();
unset($actions['create']);
return $actions;
}

然后您可以在该 Controller 中定义您的创建方法。

public function actionCreate()
{
// your code goes here
}

需要明确的是,方法名称确实需要是 actionCreate如上图所示。我看到一条评论提到 createAction ,但这是不正确的。他们可能对 CreateAction 感到困惑。作为 yii\rest 命名空间的一部分的类,它包含实际使用默认 REST 创建操作运行的代码。但是,如果您使用此方法覆盖创建请求逻辑,则该类并不重要。但对于另一种方法来说确实很重要......

方法 2 - 单独的 Action 类

就个人而言,我更喜欢并使用这种方法来覆盖默认操作。我喜欢将默认的 CRUD 操作逻辑保留在 Controller 本身之外。很高兴知道我的 Controller 中是否有操作方法,它们是完全自定义的操作。不过,这绝对只是个人喜好。

为此,您将创建一个新的类文件,该文件应包含如下所示的代码:

namespace app\actions\controllerName

class CreateAction extends \yii\rest\CreateAction
{
public function run()
{
// your code goes here
}
}

如果你走这条路,我建议你检查一下 Yii 的 REST CreateAction 类的主体,并按照他们的方式模拟你的代码的进展,假设这样做对你的用例有意义。

现在你只需要告诉 Controller 使用这个 Action 类来创建 Action 。您可以在 Controller 的 actions 方法中执行此操作,如下所示:

public function actions()
{
$actions = parent::actions();
$actions['create']['class'] = 'app\actions\controllerName\CreateAction';
return $actions;
}

如您所见,它的语法与@mrJ0ul3 所建议的相似;但该建议仅改变了一项行动的一部分的运作方式。它不允许您完全覆盖操作的逻辑——这就是为什么它在回答实际问题时错过了分数。

希望有帮助!

-大家干杯! :)

关于rest - Yii2 在 Rest ActiveController 中覆盖通用创建操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27648504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com