【问题标题】:actionCreate being called multiple times - YiiactionCreate 被多次调用 - Yii
【发布时间】:2014-07-23 17:43:19
【问题描述】:

我遇到了一个错误,即每当我提交 gii 生成的字段时,我的模型都会保存多次。我创建了一个错误日志,以便我可以看到被多次调用的内容,并且我发现函数 actionCreate 是我的代码中被调用三次(虽然有时是两次)的部分。当我填写表单并单击提交时,错误日志显示 actionCreate 函数被调用了 3 次。

The controller form looks like this 

/**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model=new Account;
        error_log("How many times do I call actionCreate");
        // To-Do make the user account creation update via ajax 
        // $this->performAjaxValidation($model);

        if(isset($_POST['Account']))
        {
            $model->attributes=$_POST['Account'];

            if($model->save())
            {
                echo 'do we reach here';
                $this->redirect(array('index','id'=>$model->id));
            }

        }

        $this->render('create',array(
            'model'=>$model,
        ));
    }

我的表格也是这样的

<?php
/* @var $this AccountController */
/* @var $model Account */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'account-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>true,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

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

    <div class="row">
        <?php echo $form->labelEx($model,'mobile_comp'); ?>
        <?php echo CHtml::dropDownList(CHtml::activeName($model,'mobile_comp'), $select, 
               $model->providerOptions, array('empty'=>'(Select Your Provider')); ?>
        <?php echo $form->error($model,'mobile_comp'); ?>
    </div>

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

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

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

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

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->

【问题讨论】:

  • 我们不知道“每当我创建一个新字段”是什么意思。
  • 感谢您解释困惑。

标签: php yii


【解决方案1】:

错误出现在我的表单中,我有 ajaxValidation=>true 而不是 ajaxValidation=>false 我不小心用一个字段多次调用函数 ActionCreate 。

【讨论】:

    【解决方案2】:

    因为你已经在线评论了:

    // To-Do make the user account creation update via ajax 
    // $this->performAjaxValidation($model);
    

    如果通过 Ajax 请求,函数 $this-&gt;performAjaxValidation($model); 会验证表单数据,并以 JSON 格式返回验证结果并停止应用程序的执行。

    在你的情况下,如果 Ajax 验证正在发生,那么没有什么可以检查验证并且问题是保存你的模型。

    取消评论$this-&gt;performAjaxValidation($model);

    另外:请添加函数代码$this-&gt;performAjaxValidation($model)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2010-10-24
      • 2011-10-18
      • 2020-10-19
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多