New Validation System

Hi guys.

Suppose I have a model and two possible scenarios: editing by user and editing by admin.

Should I write all the validation rules in rules() array, then repeat user-editable fields in ‘user’ scenario array, then repeat the same fields plus admin-editable fields in ‘admin’ scenario array?

I mean something like this:


public function rules()

{

    return array(

        array(

            'field_user_1, ..., field_user_N, field_admin_1, ..., field_admin_N',

            'required',

        ),

    )

}


public function scenarios()

{

    return array(

        'user' => array('field_user_1', ..., 'field_user_N'),

        'admin' => array('field_user_1', ..., 'field_user_N', 'field_admin_1', ..., 'field_admin_N'),

    );

}

Seems a little bit redundant.

I’ve made so:




public function rules()

{

    return array(

        array(

            'field_user_1, ..., field_user_N, field_admin_1, ..., field_admin_N',

            'required', 'on' => 'insert,update'

        ),


        array(

            'field_user_1, ..., field_user_N,

            'required', 'on' => 'notAdmin'

        ),

}



So, when i load model for update or create new for insert, defaults rules are respectively ‘update’ and ‘insert’;

When i load a model (or create new) for not admin user, i assign ‘notAdmin’ to scenario variables of model, so:




if (user_is_not_superuser)

{

     $model->scenario = 'notAdmin';

}



If i not assign scenario, it has default scenario ‘insert’ or ‘update’.

Yes, but $model->scenario = ‘notAdmin’ will throw an error “unknown scenario” if ‘notAdmin’ is not listed in scenarios() array.