YII2一次验证多种形式

时间:2018-08-21 19:22:12

标签: php yii yii2

Hellow我正在用Ajax制作几种表格并在YII上进行验证,我遇到了一些问题

以下是查看代码:

<?
    $form = ActiveForm::begin([
        'id' => 'test-form',
        'options' => ['class' => 'form-horizontal'],
    ]) ?>
        <?= $form->field($model, 'name')->textInput(['placeholder' => "Имя"])->label('Имя'); ?>
        <?= $form->field($model, 'lastname')->textInput(['placeholder' => "Фамилия"])->label('Фамилия'); ?>
        <?= $form->field($model, 'country')->textInput(['placeholder' => "Страна"])->label('Страна'); ?>
        <?= $form->field($model, 'pindex')->textInput(['placeholder' => "Индекс"])->label('Индекс'); ?>
        <?= $form->field($model, 'card') ->textInput(['placeholder' => "Ваш номер карты xxxx xxxx xxxx xxxx"])->label('Номер карты');?>
        <?= $form->field($model, 'form_name')->hiddenInput(['value' => 'Form']) ?>

        <div class="form-group">
            <div class="">
                <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
            </div>
        </div>
    <?php ActiveForm::end() ?>
    <?
    $form = ActiveForm::begin([
        'id' => 'mobile-form',
        'options' => ['class' => 'form-horizontal'],
    ]) ?>
        <?= $form->field($model2, 'name')->textInput(['placeholder' => "Имя"])->label('Имя'); ?>
        <?= $form->field($model2, 'lastname')->textInput(['placeholder' => "Фамилия"])->label('Фамилия'); ?>
        <?= $form->field($model2, 'country')->textInput(['placeholder' => "Страна"])->label('Страна'); ?>
        <?= $form->field($model2, 'pindex')->textInput(['placeholder' => "Индекс"])->label('Индекс'); ?>
        <?= $form->field($model2, 'phone') ->textInput(['placeholder' => "Ваш телефон"])->label('Ваш телефон');?>
        <?= $form->field($model2, 'form_name')->hiddenInput(['value' => 'Mobile']) ?>

        <div class="form-group">
            <div class="">
                <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
            </div>
        </div>
    <?php ActiveForm::end() ?>

然后使用ajax向控制器发送数据,代码:

 namespace app\controllers;
 use Yii;
 use yii\filters\AccessControl;
 use yii\web\Controller;
 use yii\web\Response;
 use yii\filters\VerbFilter;
 use app\models\MainForm;
 use app\models\EntryForm;
 use app\models\EntryMobile;

 class SiteController extends Controller
{
/**
 * {@inheritdoc}
 */

public function actionEntry(){

    $model = new EntryForm;
    $model2 = new EntryMobile;

    if(Yii::$app->request->isAjax) {
        $model->load(Yii::$app->request->post());
        $model2->load(Yii::$app->request->post());
       if($model->validate() || $model2->validate()){
           $json['ok'] = "";
       }else{
           $json['error'] = " ";                        
       }
       Yii::$app->response->format = Response::FORMAT_JSON;
       return $json;
   } else {
        return $this->render('entry', ['model' => $model,'model2' => $model2]);
   }

}

在模型中,我具有MainForm,以及EntryForm和EntryMobile,它们使用自己的规则扩展了MainForm。

这里是一个问题: 如何在一种方法中使$ model-> validation()和$ model2-> validation()?或如何使控制器方法在模型上的宽度有两种形式。方案不起作用,因为它们使我也一样。两个物体等。请帮助

1 个答案:

答案 0 :(得分:0)

您可以使用按位 and来测试两个模型的验证。喜欢:

$model->validate() & $model2->validate()

只有在两个条件都为真的情况下,这才会继续进行,但是无论如何都会对它们进行测试(这将引发您期望看到的验证错误)。