Php 在yii框架上通过一对一验证收集多个输入

Php 在yii框架上通过一对一验证收集多个输入,php,javascript,yii,validation,Php,Javascript,Yii,Validation,我使用的是Yii框架,我有一个表单,其中有3个电话号码输入。我将其拆分为这种格式(XXX-XXX-XXXX) 每一个按减号分割的值都被输入。 我想在用户更改/通过所有3个字段后对其进行验证,如果无效,则给出一条错误消息。 我想以相同的顺序保存它,并将其拆分回相同的格式 这是我的代码示例 <?php echo $form->labelEx($model,'phone'); ?> <?php echo $form->textField($model,'phon

我使用的是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]'); ?>


如何才能做到这一点?

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

// ...
$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!
{
    // ...
}

或者,您可以在model类中使用完全相同的代码定义自己的验证器(我认为这是更好的选择)。

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

// ...
$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!
{
    // ...
}

或者,您可以在model类中使用完全相同的代码定义自己的验证器(我认为这是更好的选择)。

但我必须先加入3个字段。我该怎么做?您必须对每个字段进行验证检查。您不必连接值(不知道字段是什么:字段数组或每个字段都有自己的名称)。如果电话字段是数组,则在模型中创建验证器并在数组中循环。如果电话字段有不同的名称(例如,它们不是数组),请在控制器上定义验证并只添加一次错误(上升标志或其他)。这会使我出错。如果($validator->validate($model->attributes))//对所有字段执行此操作,则为foreach()提供的参数无效!你们能描述一下如何组合输入的完整代码吗?验证模型的所有属性并没有意义。您应该只验证需要通过此特定验证的字段。例如:
if(!$validator->validate(($model->phone[0]))
等等。正如我在回答中指出的,这也可以通过模型上的自定义验证器来完成。您可以在Yii的文档中看到示例。但是我必须先加入3个字段。我如何才能做到这一点?您必须对每个字段进行验证检查。您不必加入值(不知道您的字段是什么:字段数组或每个字段都有自己的名称)。如果您的电话字段是数组,请在模型中创建validator并在数组中循环。如果电话字段有不同的名称(例如,它们不是数组),请在控制器上定义验证并仅添加一次错误(上升标志或其他).It's make me a error.if($validator->validate($model->attributes))为foreach()提供的参数无效//对所有字段执行此操作!您能否描述如何组合输入的完整代码?验证模型的所有属性并没有意义。您应该只验证需要通过此特定验证的字段。例如:
if(!$validator->validate($model->phone[0]))
等等。正如我在回答中指出的,这也可以通过模型上的自定义验证器来完成。您可以在Yii的文档中看到示例。