【问题标题】:Collect multi inputs with to one validation on yii framework在 yii 框架上收集多个输入并进行一次验证
【发布时间】:2012-06-12 11:57:21
【问题描述】:

我正在使用 Yii 框架,并且我有一个带有 3 个电话号码输入的表单。我将它拆分为这种格式(XXX-XXX-XXXX) 每个除以减号都是输入。
我想在用户更改/传递所有 3 个字段后对其进行验证,如果它无效则给出一条错误消息。 我想以相同的顺序保存它,然后将其拆分回相同的格式。

这是我的代码示例。

    <?php echo $form->labelEx($model,'phone'); ?>

<?php echo $form->textField($model,'phone[0]'); ?>
<?php echo $form->textField($model,'phone[1]'); ?>
<?php echo $form->textField($model,'phone[2]'); ?>

我该怎么做?

【问题讨论】:

    标签: php javascript yii validation


    【解决方案1】:

    您可以在控制器上验证输入并在需要时添加错误:

    // ...
    $validator = new CRegularExpressionValidator;
    $validator->pattern = '/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}/';
    if ( !$validator->validate( $model->phone[0] ) ) // Do this for all of your phone fields!
    {
        // add error if not added yet: $model->addError( ... );
    }
    if ( $model->validate( null, false ) ) // notice the 2nd argument!
    {
        // ...
    }
    

    或者您可以使用几乎相同的代码在模型类中定义自己的验证器(我相信这是更好的选择)。

    【讨论】:

    • 但我必须先加入 3 个字段。我该怎么做?
    • 您必须对每个字段进行此验证检查。您不必连接值(不知道您的字段是什么:字段数组或每个字段都有自己的名称)。如果您的电话字段是数组,请在模型中创建验证器并在数组中循环。如果电话字段有不同的名称(例如,它们不是数组),请在控制器上定义验证并仅添加一次错误(上升标志或其他东西)。
    • 这让我犯了一个错误。为 foreach() 提供的参数无效 if ( $validator->validate( $model->attributes ) ) // 对所有字段执行此操作!你能描述一下如何组合输入的完整代码吗?
    • 验证模型的所有属性没有意义。您应该 验证需要通过此特定验证的字段。例如:if ( !$validator-&gt;validate( ($model-&gt;phone[0] ) ) 等等。正如我在答案中指出的那样,这也可以通过模型中的自定义验证器来完成。您可以在 Yii 的文档中查看示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多