【问题标题】:Yii2 each validation rule for url. Returns error if field is emptyYii2 每个 url 的验证规则。如果字段为空,则返回错误
【发布时间】:2016-02-01 12:10:30
【问题描述】:

我在验证某些具有相同名称的文本输入时遇到问题。 我使用each 验证规则对其进行验证。每个字段都使用 url 值进行验证。

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

这是我的表单输入:

<?= $form->field($model, 'links[]')->textInput(); ?>

但如果我的链接输入为空,我会收到下一条消息:This url isn't valid。 此规则适用于单个输入,但不适用于多个。

你能不能给点建议?

【问题讨论】:

  • 你用foreach循环?
  • 为什么是 'links[]' 而不是 links...?
  • @HirenBhut,不,$this->validate() 返回错误。我可以补充一点,它适用于“字符串”验证,不适用于“url”。
  • @scaisEdge,因为每个人都可以在他的联系信息中添加许多 url。然后我收到一系列链接。

标签: validation yii2 each rules


【解决方案1】:

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

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

注意:如果yii\validators\Validator::$skipOnEmpty 属性采用默认值true,大多数验证器不会处理空输入。如果它们的相关属性接收到空输入,它们将在验证期间被简单地跳过。在核心验证器中,只有 captcha、default、filter、required 和 trim 验证器会处理空输入。 http://www.yiiframework.com/doc-2.0/guide-input-validation.html

【讨论】:

  • 如何在我的情况下使用它?带有链接的数组不为空。字段没有价值。我无法使用 url 将某事添加到我的规则中。 Yii2 文档中没有任何内容。
  • 为了更灵活的验证,您可以使用自己的函数 ['links', 'exist', 'allowArray' => true, 'when' => function ($model, $attribute) { foreach( $model->links as $link ){ if(..){ return true; }else{ 返回假; } }],
  • 坦克,但我想使用默认的 yii url 验证来避免正则表达式和与 http/https 的连接
  • 尝试添加另一个规则 ['links', 'safe']
【解决方案2】:

很久以前就有人问过了,但是如果有人像我一样最终访问此页面...

在 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

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 2017-06-07
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多