如何通过通过 REST 调用发送的 POST 请求(无 ActiveForm)使用模型验证数据 - Yii2

How to validate data with a Model by POST request sent over REST call(without ActiveForm) - Yii2

我正在创建一个 Yii 应用程序,其中数据通过 POST 请求通过 REST 调用发送到我的服务器。由于场景中没有 ActiveForm,使用正在发送数据的模型 class 验证数据的最佳方法是什么,验证成功后,它将保存到数据库 table.

我查看了官方文档,但没有找到任何相关内容。由于为 ActiveForm $model->validate() 提供了内置方法,我想知道是否有像这样的东西像为没有 ActiveForm 的情况下发布的数据调用函数一样简单,以便用我的 Model class.

我知道可以用 isset($_POST['somefield'] 来完成,但这是一种有点传统的方法,需要对每个字段重复(我个人觉得 activity 检查数据是否发布在一个字段,然后分别对每个字段执行验证)。

有没有我遗漏的官方文档?或者如果文档中没有给出,最好的方法是什么?

给我一些创建代码魔法的建议..

传统的有什么问题...

if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    //$model loaded with post data and validated
}

...?

好的,经过更多研究后,我找到了上述问题的解决方案,如下所示:

    $model = new AppDetails();
    $model->setAttributes(Yii::$app->request->post(), false);
    if($model->validate() && $model->save())
    {
        return true;
    }
    return false;

根据 Yii 文档,setAttributes() 确实 以大量方式设置属性值。 在这里,我为我的模型创建了新对象 class 然后设置来自 post 请求的属性。

一旦我将属性设置为我的模型 class 对象,我就可以 validate() 它们并将它们直接保存在数据库中,只需调用 save() 仅在成功验证后适用。

但是,您必须根据模型的规则部分发送所有属性(包括主键自动递增值。如果您不通过 [=14 之类的休息调用发送它,您也可以稍后设置它们=]).否则,validate() 将 return 为假。

关于 $model->load() 更具体一点,如果数据是 post 从 Form 编辑的(根据我从编码经验中了解到的),则 return 是正确的使用 Model class 的对象设置的字段(查看更多 here)。 load() 然后自动加载 Yii 开发人员设置的 formName 后台场景。

您可以尝试像 $model->load(Yii::$app->request->post()) 那样处理通过 REST 调用发送的数据,它总是 return false 因为没有设置属性。

我想我已经解释了上述问题的解决方案。请指出,以防有任何错误或难以理解。

希望对以后遇到同样问题的读者有所帮助。