Validaçao de formulario e salvar

Ahe Galera blz

Estou com uma pequena duvida, como eu faço para validar e salvar dois model em um formulario. O caso é o seguinte estou desenvolvendo um sistema de avaliaçao onde tem uma pergunta e 5 opcoes, entao tenho 2 tabela uma da pegunta e outra da opcoes, entao crie um form assim:


 <div class="row">

		<?php echo $form->labelEx($model,'moduloid'); ?>

                <?php echo CHtml::dropDownList('Perguntas[moduloid]',$model->moduloid, CHtml::listData($modulos,'id','nome'),array('empty' => '','style'=>'width:400px; margin-right:10px;')); ?>

	</div>




	<div class="row">

		<?php echo $form->labelEx($model,'questao'); ?>

		<?php echo $form->textArea($model,'questao',array('rows'=>1, 'cols'=>80)); ?>

	

	</div>      

        

	<div class="row">

		<?php echo $form->labelEx($model,'opcaocorreta'); ?>

		<?php echo $form->textField($model,'opcaocorreta',array('size'=>1,'maxlength'=>1)); ?>

		

	</div>


         <div class="row">

             <label>Opção A</label>

            <?php echo $form->textArea($opcoes,'opcoes',array('rows'=>1, 'cols'=>80)); ?>

            <?php echo $form->textField($opcoes,'letra',array('size'=>1,'maxlength'=>1,'value'=>'A')); ?>

        </div>

        <div class="row">

            <label>Opção B</label>

            <?php echo $form->textArea($opcoes,'opcoes',array('rows'=>1, 'cols'=>80)); ?>

            <?php echo $form->textField($opcoes,'letra',array('size'=>1,'maxlength'=>1,'value'=>'B')); ?>

        </div>

        <div class="row">

            <label>Opção C</label>

            <?php echo $form->textArea($opcoes,'opcoes',array('rows'=>1, 'cols'=>80)); ?>

            <?php echo $form->textField($opcoes,'letra',array('size'=>1,'maxlength'=>1,'value'=>'C')); ?>

        </div>

        <div class="row">

            <label>Opção D</label>

            <?php echo $form->textArea($opcoes,'opcoes',array('rows'=>1, 'cols'=>80)); ?>

            <?php echo $form->textField($opcoes,'letra',array('size'=>1,'maxlength'=>1,'value'=>'D')); ?>

        </div>

        <div class="row">

            <label>Opção E</label>

            <?php echo $form->textArea($opcoes,'opcoes',array('rows'=>1, 'cols'=>80)); ?>

            <?php echo $form->textField($opcoes,'letra',array('size'=>1,'maxlength'=>1,'value'=>'E')); ?>

        </div>



E no controler assim:


public function actionCreate()

	{

		$model=new Perguntas;

                $opcoes = new Opcoes;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Perguntas']))

		{

			$model->attributes=$_POST['Perguntas'];

                        

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


		$this->render('create',array(

			'model'=>$model,

                        'modulos'=> Modulos::model()->findAll(),

                        'opcoes'=> $opcoes,

		));

	}

Model Pergunta e Opcoes:


public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('moduloid', 'numerical', 'integerOnly'=>true),

			array('opcaocorreta', 'length', 'max'=>1),

			array('questao', 'safe'),

                        array('id, questao, moduloid, opcaocorreta', 'required'),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('id, questao, moduloid, opcaocorreta', 'safe', 'on'=>'search'),

		);

	}


Opcoes::::::::::::::::::::


return array(

			array('perguntas_id, letra, opcoes', 'required'),

			array('perguntas_id', 'numerical', 'integerOnly'=>true),

			array('letra', 'length', 'max'=>1),

			array('opcoes', 'safe'),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('id, opcoes, perguntas_id, letra', 'safe', 'on'=>'search'),

		);




Estou en duvida tambem na questao de salvar todas opcoes e validar todos os 5 campos.

Alguem pode me ajudar

Valew

Coloca assim no controller:




public function actionCreate()

        {

                $model=new Perguntas;

                $opcoes = new Opcoes;


                // Uncomment the following line if AJAX validation is needed

                $this->performAjaxValidation($model);


                if(isset($_POST['Perguntas']) && isset($_POST['Opcoes']))

                {

                        $model->attributes=$_POST['Perguntas'];

                        $opcoes->attributes=$_POST['Opcoes'];

                        if($model->save() && $opcoes->save())

                                $this->redirect(array('view','id'=>$model->id));

                }


                $this->render('create',array(

                        'model'=>$model,

                        'modulos'=> Modulos::model()->findAll(),

                        'opcoes'=> $opcoes,

                ));

        }

Eu faço assim e dá certo, Ai você vai ter que ver a questão do actionUpdate também, para ele vc pode criar na hora um find para buscar os dados da tabela Opcoes e colca ele dentro do objeto $opcoes depois de instânciar. ou então no loadModel vc procura ele lá também e salva em outro array que não seja o $model.

Ah, rola de verificar por $opcoes->validate() também

Ahe blz

Fiz a forma que vc me flow só que esta acontecendo o seguinte erro:


CDbCommand falhou ao executar o comando SQL: SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails (`eurekasos`.`opcoes`, CONSTRAINT `opcoes_ibfk_1` FOREIGN KEY (`perguntas_id`) REFERENCES `perguntas` (`id`)) 

Este erro eu sei que é porque eu nao estou passando o id da pergunta, como eu faria utilzando a sua opcoes, e outra coisa como pode ver as opcoes esta em um array ele ira salvar todas opcoes as 5 opcoes de resposta cmo mostra o form?

Ha quando ele valida a opcoes se tiver um campo sem preencher ele retorna erro de valição dizendo que esta sem preencher mais ele apaga o formulario de opcoes. o que´será que esta errado?

Valew Brows