如何通过通过 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 因为没有设置属性。
我想我已经解释了上述问题的解决方案。请指出,以防有任何错误或难以理解。
希望对以后遇到同样问题的读者有所帮助。
我正在创建一个 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 因为没有设置属性。
我想我已经解释了上述问题的解决方案。请指出,以防有任何错误或难以理解。
希望对以后遇到同样问题的读者有所帮助。