$model->save() добавляет две строки в таблицу [Решено]

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

$model->save() добавляет две строки в таблицу [Решено]

Сообщение anton44eg »

Столкнулся со странной проблемой. Выполняется вот такой метод:

Код: Выделить всё

public function actionAddProblem() {
        $model = new Problem;
        if(isset($_POST['Problem'])) {
            $model->attributes=$_POST['Problem'];
            if($model->validate() && $model->save()) {
                $this->redirect('problemList');
            }
        }
        $this->render('addProblem', array('model'=>$model));
    }
В результате добавляется 2 строки в таблицу. БД mysql, Yii 1.1.10
Последний раз редактировалось anton44eg 2012.04.25, 10:36, всего редактировалось 1 раз.
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: $model->save() добавляет две строки в таблицу

Сообщение Choo »

Этот код сам по себе не должен вызывать такого поведения, скорее всего сам экшн дважды вызывается. Кстати, validate() тут избыточен, save() тоже проводит валидацию по умолчанию и возвращает результат.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: $model->save() добавляет две строки в таблицу

Сообщение anton44eg »

Данные для модели собираются во вьюшке с CActiveForm и передаются контроллеру. Вызывать экшн второй раз негде. Упрощенная вьюшка:

Код: Выделить всё

<?php
$form = $this->beginWidget('CActiveForm', array(
    'id'=>'problem',
    'enableAjaxValidation'=>true,
    'enableClientValidation'=>true,
    ));
?>
<?= $form->errorSummary($model); ?>

<div class="row">
    <?=$form->labelEx($model,'text'); ?>
    <?=$form->textArea($model,'text'); ?>
    <?=$form->error($model,'text'); ?>
</div>

<div class="row buttons">
    <?=CHtml::submitButton('Добавить'); ?>
</div>

<?php $this->endWidget(); ?>
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: $model->save() добавляет две строки в таблицу

Сообщение slavcodev »

есть где! твой ActiveForm отправляет ajax-запрос на валидацию на этот же экшн и он сохраняет дважды!
Жду Yii 3!
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: $model->save() добавляет две строки в таблицу

Сообщение anton44eg »

Спасибо, разобрался!
Ответить