definir Escenarios

Hola Comunidad

Introduccion:

estoy migrando los datos de un sistema a otro

el nuevo sistema (hecho en Yii) tiene reglas nuevas, mas controles y etc

el anterior…NO, los datos no estan normalizados, no hay integridad, etc

bien

trate de resolver la mayoria de estos problemas, pero otros deberan quedar para mas adelante (una vez implantado el sistema)

mi problema:

como definir un escenario "migracion" para que el modelo no use algunos validadores que cree

por ejemplo:

no quiero en la migracion usar las ultimas 3 ,las demas si




/**

     * @return array validation rules for model attributes.

     */

    public function rules()

    {

        return array(


            array('matricula, libro, folio, tipo_registro, fecha_registro, condicion_matricula, titulo_principal,pro_idProfesional,tit_idTitulo,ins_idInstitucion', 'required'),

            .....

                        array('fecha_vto,fecha_registro,fecha_exped_titulo','CFechaValidaValidator'),

                        array('tit_idTitulo','ValidaTitulo'),

                        array('esp_idEspecialidad','ValidaEspecialidad'),

                        array('titulo_principal','ValidaTituloPrincipal'),




        );

    }



algo asi?




$model->scenario='migracion';

$model->validate();




'matricula, libro, folio, tipo_registro, fecha_registro,condicion_matricula,titulo_principal,pro_idProfesional,tit_idTitulo,ins_idInstitucion','required'), //todos los escenarios

.............

                        array('tit_idTitulo','ValidaTitulo', 'on'=> <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' /> ),

                        array('esp_idEspecialidad','ValidaEspecialidad', 'on'=> <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' /> ),

                        array('titulo_principal','ValidaTituloPrincipal', 'on'=> <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />?<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' /> ),


//<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />??? "todos menos migracion"



se definen los escenarios?

en donde?

hay predefinidos?

estoy usando la version 1.0

lei esto securing-attribute-assignments, pero me quedan dudas

gracias!!!

Definis para cada regla los escenarios en las que se aplica, si a una regla no le definis escenario o lo definis en blanco entonces se valida en cualquier escenario.

Suponete que tenes dos escenarios:

‘migracion’, ‘produccion’

Definis las reglas asi:




   array('matricula, libro, folio, tipo_registro, fecha_registro,condicion_matricula,titulo_principal,pro_idProfesional,tit_idTitulo,ins_idInstitucion','required', 'on'=>'produccion, migracion'), //todos los escenarios


   array('tit_idTitulo','ValidaTitulo', 'on'=> 'produccion' ),

   array('esp_idEspecialidad','ValidaEspecialidad', 'on'=> 'produccion'

 ),

   array('titulo_principal','ValidaTituloPrincipal', 'on'=> 'produccion'

 ),



Entoces, despues




$model->scenario='migracion';

$model->validate(); 



Solo valida los que tienen escenario migracion y los que no tienen escenario.

Y




$model->scenario='produccion';

$model->validate(); 



Valida los que tienen escenario produccion y los que no tienen escenario.

esto solo me sirve si yo puedo decir

"el escenario por defecto del modelo es produccion"

se puede?

sino tendría que modificar muchas lineas de codigo poniendo




$model->scenario='produccion';

ahhhh… ya entiendo… y si tenes un BaseModel donde todos tus model hereden de ese, y en el init le pones $this->scenario=‘produccion’?

Incluso podes hacer que tome el scenario basandose en algun $_GET o alguna info de session.

yes, es una opcion. Pero no es necesario

La calse CActiveRecord tiene el init y se puede sobreescribir




    /**

     * Initializes this model.

     * This method is invoked in the constructor right after {@link scenario} is set.

     * You may override this method to provide code that is needed to initialize the model (e.g. setting

     * initial property values.)

     * @since 1.0.8

     */

    public function init()

    {

    }



y creo que sería mejor poner algo asi en mi modelo (Matriculas)




    public function init()

    {

      parent::init();

      $this->scenario='produccion';

    }



Gracias PoL

ahora me voy a hecharle algo al estomago :lol:

despues les comento como quedó

saludos

Error , el form se envia varias vaces con multiples modelos

Buenas noches comunidad, saludos cordiales, el presente es para solicitar ayuda del siguiente caso …

Código:

public function actionCreate()

{

            &#036;model1=new Informacion;


    &#036;model2=new Persona;


    &#036;model3=new Usuario;


    &#036;model4=new Municipio;

.

.

}

// teniendo los models indicados, al presionar el boton guardar en la vista donde estan integrados los 4 models descruto, se me presenta que el formulario se envia 4 veces. he intentado con rules, validate(false), scenarios, pero no logro dar con la solucion de como validar campos especificos con muchos models integrados,.

// en este ejemplo me gustaria validar solo el campo Tipo_Informacion y Privacidad_Informacion que corrresponden al $model1, y que el form se envie una sola vez, y no 4 veces…

//saludos estare agradecido de su ayuda

Seria muy util q nos muestres como es tu vista del los formularios.