Yii2 - ActiveRecord验证与表单验证

时间:2018-06-07 11:15:28

标签: yii2

这是关于最佳做法的问题。通常,何时使用表单验证更好(即:为发送的请求创建表单)。什么时候依靠ActiveRecord验证更好。

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

{
  "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 - Validating nested objects的前一个问题的启发,特别是那里给出的答案

2 个答案:

答案 0 :(得分:3)

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

在您的情况下,如果只有2个模型且逻辑非常清楚主要模型是客户而次要模式是地址,那么它真的很明显个人喜好。您可以对表单使用scenario,并在专用表单模型中的现有模型中包含特定于方案的规则。如果由于某种原因,表单字段具有与数据库不同的验证要求,则将它们放在单独的模型中可能更清晰。

最终代码必须到达某个地方,所以你想要考虑什么才能让你最有意义 - 例如,你想要将数据功能保留在控制器外面,所以你也是想要使用CustomerController或为此目的创建一个?如果您使用表单模型,则可能需要匹配的控制器并使主要模型专注于特定于表的CRUD操作。

答案 1 :(得分:0)

最好将代码库的大小保持在最低限度。

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