Не срабатывает валидация второй модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
IvanChe
Сообщения: 89
Зарегистрирован: 2012.11.25, 18:55

Не срабатывает валидация второй модели

Сообщение IvanChe »

Добрый всем вечер!
Есть код формы:

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

<?php $form=$this->beginWidget('CActiveForm', array(
      'id'=>'product-form',
      'enableAjaxValidation'=>true,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
  )); ?>
  
      <?php echo $form->errorSummary(array($model,$modelDescription)); ?>
  
      <div class="row">
          <?php echo $form->labelEx($model,'title'); ?>
          <?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
          <?php echo $form->error($model,'title'); ?>
      </div>

    <div class="row">
        <?php echo $form->labelEx($modelDescription,'description'); ?>
        <?php echo $form->textField($modelDescription,'description'); ?>
        <?php echo $form->error($modelDescription,'description'); ?>
    </div>
  
    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Создать' : 'Сохранить'); ?>
    </div>
    
<?php $this->endWidget(); ?>
есть код контроллера для действия create:

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

$model=new Product;
$modelDescription = new ProductDescription;

$this->performAjaxValidation( array($model,$modelDescription) );
        
    if( isset($_POST['Product'],$_POST['ProductDescription']) )
    {
        $model->attributes=$_POST['Product'];
      
        $modelDescription->attributes = $_POST['ProductDescription'];
        $modelDescription->product_id = $model->id;
    
        $errors['valid'] = $model->validate();
        $errors['valid'] = $errors['valid'] && $modelDescription->validate();
      
      if($errors['valid']){
        $transaction=Yii::app()->db->beginTransaction();
        try{
          if(!$model->save()){
            throw new Exception('Ошибка при сохранении формы "Данные"');
          }
          if(!$modelDescription->save()){
            throw new Exception('Ошибка при сохранении формы "Описание"');
          }
          $transaction->commit();
          }catch( Exception $e ){
                $transaction->rollback();
          }
      }
Проблема вот в этом месте:

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

$errors['valid'] = $model->validate();
$errors['valid'] = $errors['valid'] && $modelDescription->validate();
После валидации $model выскакивает в форме в поле errorSummary отчет об ошибках только модели $model, а модель $modelDescription даже не затрагивается никак. Как сделать, чтобы сперва проверились все модели, а лишь затем общий отчет вышел в форму в поле errorSummary ???
Заранее благодаре! :)
Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: Не срабатывает валидация второй модели

Сообщение resurtm »

Вот правильный пример: http://www.yiiframework.com/wiki/218/ho ... n-edition/
Обратите внимание:

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

// validate BOTH $a and $b
$valid=$a->validate();
$valid=$b->validate() && $valid;
У вас:

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

$errors['valid'] = $model->validate();
$errors['valid'] = $errors['valid'] && $modelDescription->validate();
Порядок важен. В вашем случае если первая строка записала в $errors['valid'] значение false, то во второй строке вызов метода validate() вообще не произойдёт из-за принципов вычисления булевых выражений в PHP. Т.е. правильно вот так:

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

$errors['valid'] = $model->validate();
$errors['valid'] = $modelDescription->validate() && $errors['valid'];  
IvanChe
Сообщения: 89
Зарегистрирован: 2012.11.25, 18:55

Re: Не срабатывает валидация второй модели

Сообщение IvanChe »

Вот я затуп !! "Слона-то я и не приметил"(с) :D
Спасибо большое, что помогли распутаться. Закрываю этот заказ и пора видать в отпуск !!! :D
Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: Не срабатывает валидация второй модели

Сообщение resurtm »

IvanChe писал(а):Вот я затуп !! "Слона-то я и не приметил"(с) :D
Бывает. ;)
Ответить