Yii2 url的每个验证规则。如果字段为空,则返回错误

时间:2016-02-01 12:10:31

标签: validation yii2 each rules

我在验证一些具有相同名称的文本输入时遇到问题。 我使用{String[8]}验证规则验证它。每个字段都使用url值进行验证。

each

这是我的表单输入:

[['links'], 'each', 'rule' => [
    'url', 'defaultScheme' => 'http', 'skipOnEmpty' => true, 'message' => 'This url isn\'t valid'
]],

但如果我的链接输入为空,我会收到下一条消息:<?= $form->field($model, 'links[]')->textInput(); ?> 。 此规则适用于单个输入,但不适用于多个输入。

你可以建议吗?

2 个答案:

答案 0 :(得分:2)

默认情况下,如果输入的值为空字符串,空数组或null,则该输入被视为空。您可以通过使用PHP callable配置yii\validators\Validator::isEmpty()属性来自定义默认的空检测逻辑。例如,

['agree', 'required', 'isEmpty' => function ($value) {
    return empty($value);
}]

注意:如果yii\validators\Validator::$skipOnEmpty属性的默认值为true,则大多数验证器不处理空输入。如果它们的关联属性接收空输入,则在验证期间将简单地跳过它们。在核心验证器中,只有验证码,默认值,过滤器,必需和修整验证器将处理空输入。 http://www.yiiframework.com/doc-2.0/guide-input-validation.html

答案 1 :(得分:1)

很久以前就被问过了,但如果有人像我一样在这个页面上结束......

在Yii上,使用同一形式创建多个模型的方法(至少我努力找出的方式)是:

controller
$links = [];
for($i=0; $i<10; $i++) {
   $links['link'. $i] = new Link();
}
return $this->render('view', ['links' => $links]);

view
foreach($links as $index => $link) {
   echo $form->field($link, '['. $index .']link')->textInput();
}

这样您甚至可以使用Model::validateMultipleModel::loadMultiple

相关问题