【问题标题】:Yii2 Model validation is not working as expectedYii2 模型验证未按预期工作
【发布时间】:2019-12-09 08:18:54
【问题描述】:

我正在尝试在 Yii2 框架中验证一个简单的表单。 模型的验证方法是 -

    /**
     * {@inheritdoc}
     */

    public function rules()
    {
        return array(
            array('name', 'required'),
            // ... other rules
        );
    }

当我尝试提出请求时,它说 -

array(1) { ["name"]=> array(1) { [0]=> string(21) "Name cannot be blank." } }

但问题是我在请求中发送名称字段( POST )。但是在提供 name field 之后,它给出了一个错误。

如果我为request 执行var_dump,它会显示名称字段在请求中。

这里是请求数据的var_dump 和验证错误。 -

array(1) { ["name"]=> string(6) "distro" } array(1) { ["name"]=> array(1) { [0]=> string(21) "Name cannot be blank." } }

提前谢谢你。

【问题讨论】:

  • 您能否在控制器中添加您的操作代码,以便我们查看您如何设置/验证数据?
  • 在验证之前尝试$model->name = Yii::$app->request->post("username");
  • 你能附上控制器的代码>动作以获得更好的解决方案
  • 您必须在使用$model->load(Yii::$app->request->post()) 方法验证之前将请求的数据加载到模型中。此方法将帮助您将请求的数据映射到模型。

标签: yii yii2 yii2-advanced-app


【解决方案1】:

如果我正确理解了您的问题,那么您的问题就在于您输入的名称。 在Yii2 ActiveRecord 中,所有数据都在模型名称数组中。例如:

您的模型名称是Users,当您使用 ActiveRecord 时,您的数据必须像这样发送到规则处理它:

{
    'Users' => {
        'username' => 'john_doe',
        'fullname' => 'John Doe',
    }
}

因此将您的 html 表单输入名称更改为:model_name[field_name]

像这样:

<input type="text" name="Users[username]">

【讨论】:

  • 我使用ajax发送请求,内容类型为json。 - { "users" : { "username"=&gt; "john_doe", "fullname" =&gt; "John Doe" } } 但它仍然给出同样的错误。
  • @TrueCode 请更新您的问题并发送您的代码和型号名称。
  • 这并不完全正确。表单输入使用大写的模型名称而不是蛇形,所以它应该是Users[username] (ModelName[field])。也没有必要保持这种结构。 \yii\base\Model::load($data, $formName = null) 方法的第二个参数决定在哪里查找数据。当$formNamenull 时,使用模型名称并在$data[$formName] 中查找数据。但是当使用空字符串时,属性会直接从$data 加载。
猜你喜欢
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2018-01-27
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多