yii验证输入的电话号码数组

use*_*556 5 php validation jquery yii

我正在使用Yii 1.1.16中的多联系表格.用户可以在哪里添加多个电话号码.

问题是,我如何使用Yii验证这一点rules()

<div class="form-group">
                <?php 
                echo $form->labelEx($model,'contacts', array('class'=>'col-md-3 control-label')); 
                ?>
                  <div class="col-md-9">
                    <div class="multiple-contact multiple-form-group input-group padding-bottom-10px" data-max="5">
                            <div class="input-group-btn input-group-select">
                                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
                                    <span class="concept">Phone</span> <i class="fa fa-caret-down"></i>
                                </button>
                                <ul class="dropdown-menu" role="menu">
                                    <li><a href="#phone">Phone</a></li>
                                    <li><a href="#fax">Fax</a></li>
                                    <li><a href="#mobile">Mobile</a></li>
                                </ul>
                                <?php echo $form->textField($model,'contacts',array('type'=>'text', 'class'=>'input-group-select-val', 'name'=>'contacts[type][]','value'=>'phone')); ?>
                            </div>

                            <?php echo $form->textField($model,'contacts',array('size'=>60,'maxlength'=>255, 'name'=>'contacts[value][]','class'=>'form-control')); ?>
                            <?php echo $form->error($model,'contacts'); ?>
                            <span class="input-group-btn">
                                <button type="button" class="btn btn-success btn-add"><i class="fa fa-plus"></i></button>
                            </span>
                   </div>
                 </div>
            </div>
Run Code Online (Sandbox Code Playgroud)

我尝试使用它,但不起作用

public function rules()
{
        return array(
    array('contacts[value][]', 'required'),
    array('contacts[value][]', 'integerOnly'=>true),
    array('contacts[value][]','type','type'=>'array','allowEmpty'=>false)
    );
}
Run Code Online (Sandbox Code Playgroud)

这是一个关于jQuery方面如何工作的示例小提琴.我希望它能够验证'enableAjaxValidation'=>true,.此外,当添加更多字段时,它会复制id输入的字段.并没有完成ajax帖子onblur/onfocus

cra*_*ter 5

使用自定义验证.

在规则中声明自定义验证器,并在验证器方法中定义所需的验证.

public function rules()
{
    return array(
      array('contacts', validateContacts),
    );
}

public function validateContacts($attribute,$params)
{
   if (length($this->contacts) == 0) {
      $this->addError($attribute, 'You must add at least one contact!');
   }
   foreach($this->contacts as $contact) {
      // ...
   }

}
Run Code Online (Sandbox Code Playgroud)

在控制器中,将contacts数组分配给Model字段并调用模型的验证方法.如果有任何错误,它将通过该行显示

<?php echo $form->error($model,'contacts'); ?>
Run Code Online (Sandbox Code Playgroud)

在视图中.

控制器包含调用验证的代码.

$contactModel = new Contact;
// assign the array of contacts to the model
$contactModel->contacts = $POST['myForm]['contacts']
$contactsModel->validate();

$this->render('myform', contactModel);
Run Code Online (Sandbox Code Playgroud)

如果您希望通过Ajax进行验证,则需要在创建表单时指定:

$form=$this->beginWidget('CActiveForm', array(
   'id'=>'top-websites-cr-form',
   'enableAjaxValidation'=>true,
   'clientOptions' => array(
      'validateOnSubmit'=>true,
      'validateOnChange'=>true),
));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您的控制器可以检查ajax表单.

if(isset($_POST['ajax']) && $_POST['ajax']==='branch-form')
{
   echo CActiveForm::validate($model);
   Yii::app()->end();
}
Run Code Online (Sandbox Code Playgroud)

参考文献:http: //www.yiiframework.com/wiki/168/create-your-own-validation-rule/


小智 0

您应该将其设为具有自己的验证的单独模型。然后在您的控制器中,您必须分别验证主模型和相关模型。

这是此类设置的一个很好的指南: http://www.yiiframework.com/wiki/384/creating-and-updating-model-and-its-lated-models-in-one-form-inc-image/