Validar formulario unando escenario y ajax

Hola a todos.

He estado tratando de validar mi formulario de tal forma que cambie de escenario cuando activo el onclic del un checkbox. He logrado que se cambie de escenario sin enmabrgo no me está mostrando las validaciones de campos oblicatorios que establecen las reglas del modelo (:[

Agradesco cualquer ayuda que me puedan dar.

Esta es mi clase modelo:


 

public function rules()

    {

        return [

             [['field_pk_fk', 'field1','field2'], 'required','on'=>'On JI'],

            [['field_pk_fk', 'field1','field2','field3','field4'], 'required','on'=>'Off JI']

}



el formulario es este:




$form = ActiveForm::begin(['layout'=>'horizontal','id'=>'result-form',

    'enableAjaxValidation'=>true,

    'enableClientValidation'=>true]); ?>


 <?= $form->field($model, 'field1')->checkbox(array('value' => 'Yes', 'uncheck' => 'No')) ?>


    <?= $form->field($model, 'field2')->textarea(['maxlength' => 1000]) ?>


  <?= $form->field($model, 'field3')->textarea(['maxlength' => 1000]) ?>


  <?= $form->field($model, 'field4')->textarea(['maxlength' => 1000]) ?>




esta es mi clase control




public function actionCreate()

    {

        

         $model = new Resultado(); 

         $this->performAjaxValidation($model);      

        if($model->load(Yii::$app->request->post()))   

        {

       if($model->field1 === 'Yes')

       {

        $model->setScenario ('On JI');

       }

       else           

       {

         $model->setScenario ('Off JI'); 

       }

       }

       

        if ($model->load(Yii::$app->request->post()) && $model->save()) {

            return $this->redirect(['view', 'id' => $model->field_pk_fk]);

        } else {

            return $this->render('create', [

                'model' => $model,

            ]);

        }

    }


    protected function performAjaxValidation($model)

    {

        if(isset($_POST['ajax']) && $_POST['ajax']==='result-form')

        {

         $model->validate();

          Yii::app()->end();

        }

    }






Quita field_pk_fk de required en ambos scenarios ya que ese campo no lo estas obteniendo del formulario por lo que no valida.

Si es un primary key auto increment se calcula al insertar en BBDD y no se modifica nunca, o sea no debe aparecer en las rules.

En las rules solo aparecen los campos que pueden ser modificados.

Gracias, en mi caso el campo field_pk_fk es una llave foránea no auto incremental que le paso al formulario por $_get, ese campo lo tengo bloqueado y siempre va a tener el valor que recibe por lo que no es necesario que aparezca en las reglas.

Voy a estudiarme este artículo: jquery-manual.blogspot.com/2015/02/yii-framework-2-validar-formulario-con.html (soy newbie y no me permiten poner el vinculo <_< ) que tal vez sea la respuesta a la dificultad que tengo con el Ajax.

Espero que les sea útil.

Ten cuidado, la función actionCreate esta creada según las normas y estilo de Yii 2.0. (daria error en yii 1.1)

La función performAjaxValidation($model) esta creada según las normas y estilo de Yii 1.1. (daria error en yii 2.0)

Lo de los mensajes de validación en ajax no los he manejado aún, mira este post que aún esta abierto, y creo que es un caso similar al tuyo.

saludos.

Gracias por la ayuda. He logrado cambiar del escenario al activar el checkbox, a eso agregué una validación en JavaScript para que cuando el checkbox esté desmarcado, se deshabiliten campos del segundo escenario. Al marcar el checkbox se habilitan los campos y se activa el segundo escenario, sin embargo, acto seguido, cuando desmarco el checkbox los campos se deshabilitan y continua mostrando los deshabilitados como requerido del segundo escenario, me gustaría quitar se marquen estos campos como requerido cuando están deshabilitado ??? .

Buenas se que el tema es viejo, pero pregunto pudiste resolverlo?, estoy en la misma situación, tengo un combo y dependiendo de la opcion habilito un escenario, pero si el usuario lo vuelve a quitar me sigue pidiendo las reglas del escenario anterior. muchas gracias de antemano

ya lo resolvi, tenia un mal concepto y es mas logico utiliizar las reglas, que los escenarios.