我在验证一些具有相同名称的文本输入时遇到问题。
我使用{String[8]}
验证规则验证它。每个字段都使用url值进行验证。
each
这是我的表单输入:
[['links'], 'each', 'rule' => [
'url', 'defaultScheme' => 'http', 'skipOnEmpty' => true, 'message' => 'This url isn\'t valid'
]],
但如果我的链接输入为空,我会收到下一条消息:<?= $form->field($model, 'links[]')->textInput(); ?>
。
此规则适用于单个输入,但不适用于多个输入。
答案 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::validateMultiple
和Model::loadMultiple
。