Yii2 - 活动记录验证与表单验证



这是一个关于最佳实践的问题。通常,何时使用表单验证更好(即:为正在发送的请求创建表单(。什么时候依靠活动记录验证更好。

示例:我有一个模型客户和模型地址,其中每个客户有多个地址。在创建客户的表单中,我想发送多个地址

{
"name": "customer",
"vat_no": "12345678",
"time_zone": 277,
"category": 1,
"email": "customer@mycustomer.com",
"addresses":[
{
"street_address": "abcd...",
"phone": 1234567
},
{
"street_address": "hdhdh...",
"phone": 2345678
}
]}
  • 在这种情况下,像 Yii2 指南给出的示例一样为这种形式构建模型是否更好 https://www.yiiframework.com/doc/guide/2.0/en/start-forms
  • 还是最好依赖此示例中给出的客户地址验证 https://www.yiiframework.com/doc/guide/2.0/en/input-multiple-models

**这个问题的灵感来自我之前在这里提出的一个问题 Yii2 - 验证嵌套对象,特别是关于那里给出的答案

这部分取决于您的表单与模型的匹配程度 - 例如,您需要多少来转换表单数据,验证规则是否相同以及需要多少模型。

在您的情况下,如果只有 2 个模型,并且逻辑很清楚,主要模型是客户,次要模型是地址,这实际上是个人偏好。您可以对窗体使用方案,并在现有模型专用窗体模型中具有特定于方案的规则。无论出于何种原因,如果表单字段的验证要求与数据库的验证要求不同,则将它们放在单独的模型中可能会更清晰。

最终,代码必须去某个地方,所以你要考虑什么对你来说最有意义 - 例如,你想将数据功能排除在控制器之外,所以你想使用客户控制器还是为此目的创建一个?如果使用表单模型,则可能需要匹配的控制器,并使主模型专注于特定于表的 CRUD 操作。

最佳做法始终是将代码库的大小保持在最小值。

因此,如果使用多个模型适合您,请不要通过添加表单模型来创建(不必要的(额外代码。

最新更新