【问题标题】:Yii2 - Validate attribute with keysYii2 - 使用键验证属性
【发布时间】:2021-05-15 01:20:02
【问题描述】:

我在属性键验证方面遇到问题。

在模型中我有如下属性:

public $_fileds = [];

我的看法

  <?= $form->field($model, '_fileds[name]') ?>
  <?= $form->field($model, '_fileds[type]') ?>

我想将“_fields[name]”设置为必需字段。例如,我尝试在模型中添加如下规则:

public function rules()
{
  return [
    [['_fields[name]'], 'required']
 ];
}

但这不起作用:(

有人有解决办法吗?

对不起,我的英语不好,提前感谢所有解决方案。

【问题讨论】:

  • _fields[name] 不是属性名称,因此在验证规则中不起作用。您是否有任何理由为多个字段使用一个数组属性而不是为每个字段添加单独的属性?
  • 是的,我想将 $_fields 作为 json 添加到 mysql 中的表中,例如: [0 => ['name' => 'Email', 'type' => 'text'], 1 => ['名称' => '密码', '类型' => '密码']]
  • 验证后不能从多个属性生成这个 JSON 吗?
  • 您可以为特定的 JSON 格式再创建一个模型,并在规则中描述 json 字段
  • 但我想使用循环为索引做多个字段。 _fileds[0][名称]、_fileds[1][名称]、_fileds[2][名称]。在验证器“每个”的帮助下做你提到的,还是我应该收集表格输入?

标签: php validation model-view-controller yii2


【解决方案1】:

您可以编写自己的验证。

删除:public $_fileds = [];

public function rules()
{
  return [
    [['_fields[name]'], 'validateName']
 ];
}

在同一模型类中:

public function validateName():bool
    {
        ... your checks(if fails return false) ...
        return true;
    }

但是有一个问题:如果某些检查失败,在正常情况下,您需要使用 $this->addError() 设置错误消息,这将正确处理不是数组元素的属性,因为作为 @ 的第一个元素987654324@ 您需要将属性名称作为字符串传递,其中 '_fileds' 可以,但 '_fileds[name]' 不起作用。因此,您还需要找到一种在错误出现时返回错误的方法。属性标签和提示也有同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2011-12-17
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多