[php]Yiiフォーム検証

15797 ワード

CActiveFormは実際にはChtmlクラスのパッケージであり、Chmtlとは異なる点でCActiveFormが検証メカニズムを提供している.
サーバ側/クライアント/ajax検証の3つ
フォーム:
<?php $form=$this->beginWidget('CActiveForm',
    array(
        'id'=>'contact_form',
        'enableAjaxValidation'=>true//   ajax      //'enableClientValidation'=>true,//         //'action'=>'site/contact',  //'method'=>'get',  )
); ?> <p class="note">Fields with <span class="required">*</span> are required.</p>

<div class="row">
    <?php echo $form->labelEx($model,'name');  ?>  <?php echo $form->textField($model,'name');?>  <?php  //          echo $form->error($model,'name');
    ?>  </div>

<div class="row">
    <?php echo $form->labelEx($model,'email'); ?>  <?php echo $form->textField($model,'email'); ?>  <?php  //          echo $form->error($model,'email');
    ?> </div>

<div class="row">
    <?php echo $form->labelEx($model,'subject'); ?>  <?php echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>128)); ?> </div>

<div class="row">
    <?php echo $form->labelEx($model,'body'); ?>  <?php echo $form->textArea($model,'body',array('rows'=>6, 'cols'=>50)); ?> </div>
<?php $model -> name = 0;

echo $form->radioButtonList($model,'name',

    array('1'=>'Male','0'=>'Female'),

    array('separator'=>'&nbsp;','labelOptions'=>array('class'=>''))

)
?> <div class="row">
    <?php echo $form->labelEx($model,'label:'); ?>  <?php   $model ->name = array(1,2,3,4);//  checkboxcontroller      ,radio,select            echo $form->checkBoxList($model,'name',

        array('1'=>'Football','2'=>'Music','3'=>'Game','4'=>'basketball'),

        array('separator'=>'&nbsp;','labelOptions'=>array('class'=>'mylabel'))

    )
    ?> </div>
<?php if(extension_loaded('gd')): ?>  <div class="row">
        <?php echo $form->labelEx($model,'verifyCode'); ?>  <div>
            <?php $this->widget('CCaptcha'); ?>  <?php echo $form->textField($model,'verifyCode'); ?>  </div>
        <div class="hint">Please enter the letters as they are shown in the image above.
            <br/>Letters are not case-sensitive.</div>
    </div>
<?php endif; ?>  <div class="row submit">
    <?php   echo CHtml::submitButton('Submit');
    ?> </div>
//         <?php echo $form->errorSummary($model); ?> <?php $this->endWidget(); ?>

検証:
public function actionContact()
{
    $model=new ContactForm;
    //ajax validation  if(isset($_POST['ajax']) && $_POST['ajax']==='contact_form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    if(isset($_POST['ContactForm']))
    {
        $model->attributes=$_POST['ContactForm'];
        if($model->validate())//        {
            $headers="From: {$model->email}\r
Reply-To: {$model->email}"; mail(Yii::app()->params['adminEmail'],$model->subject,$model->body,$headers); Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.'); $this->refresh(); } } $this->render('contact',array('model'=>$model)); }

注目してくれてありがとう!