Здравствуйте.
В Yii я недавно и при изучении столкнулся со следующей проблемой.
Есть форма, в ней используются две модели: Post и Steps. Для вывода полей модели Steps использую табличный ввод, а также есть возможность добавлять динамические поля для модели Steps.
_form.php
<div id="steps">
<?php echo $form->errorSummary($stepForm); ?>
<?php foreach ($stepForm as $i => $step): ?>
<div id="stepRow_<?php echo $i; ?>" class="steps">
<h2>Шаг <?php echo $i + 1; ?> </h2>
<?php echo $form->textField($step, "[$i]content", array('class' => 'span5', 'maxlength' => 128)); ?>
</div>
<?php endforeach; ?>
</div>
<?php app()->clientScript->registerScript(
"addRow", "
var countRow = $('.steps').length;
$('#step_2').on('click', '#addStepBtn', function() {
$('#steps').append('<div id=\"stepRow_'+countRow+'\" class=\"steps\"><h2>Шаг '+parseInt(countRow+1)+'</h2><input id=\"Steps_'+countRow+'_content\" class=\"span5\" type=\"text\" maxlength=\"128\" name=\"Steps['+countRow+'][content]\" ></div>');
countRow += 1;
});
", CClientScript::POS_READY
);?>
В контроллере обрабатывается так:
PostController.php
$model = new Posts;
$stepForm[] = new Steps();
$steps = array();
$validStep = true;
$validPost = true;
if (isset($_POST['Posts'])) {
$model->attributes = $_POST['Posts'];
$validPost = $model->validate() && $validPost;
foreach ($_POST['Steps'] as $value) {
$step = new Steps();
$step->attributes = $value;
$validStep = $step->validate() && $validStep;
if ($validStep) {
$steps[] = $step;
}
}
if ($validStep && $validPost) {
$model->steps = $steps;
$transaction = Yii::app()->db->beginTransaction();
try {
if ($model->withRelated->save(true, array('steps'))) {
$transaction->commit();
$this->redirect(array('view', 'id' => $model->id));
}
} catch (Exception $e) {
$transaction->rollback();
Yii::app()->handleException($e);
}
} else {
CActiveForm::validateTabular($stepForm);
}
}
$this->render(
'create', array(
'model' => $model,
'stepForm' => $stepForm,
)
);
Проблема в том, что при сабмите с динамическими полями не прошедших валидацию возвращается форма без сообщений об ошибках и без этих самых динамических полей.
Как сказать CActiveForm, что добавились новые поля и для них тоже следует выводить ошибки или ткните носом где это разбиралось, потому что я облазил форум и ничего не нашел.