yii2 - Yii 2.0 Scenarios - Dynamic Validation -


i have situation validate textbox input; however, type of validation dependent on selection of dropdown list on page (there multiple of each of these on page). so, textbox can take string, integer, date, etc. , user must select dropdown list tell me data type has user enter.

i thinking use scenarios this; however, textbox 1 field in model/database accepts string @ database level (i don't want user enter string when integer appropriate regardless of how handle on backend).

here's thinking far, don't know if best route take problem? also, if can use scenarios how specify in view rules textbox when user selects requires i.e..date input? there way call rule ajax on click of dropdown list?? sorry, little broad question, i'm new yii , i'm trying headed down right path this. thank you!

public function scenario() {     return[             'isstring' => ['filter_value'],             'isint' => ['filter_value'],             'isdate' => ['filter_value'],             'isfloat' => ['filter_value'],             'all' => ['freq_int', 'freq_unit_fk', 'filter_field_fk',   'arithmetic_op', 'logic_op', 'filter_value']     ];  } public function rules() {     return [         [['freq_int', 'freq_unit_fk'], 'integer', 'message' => 'integer'],         [['freq_int', 'freq_unit_fk', 'filter_field_fk', 'arithmetic_op'], 'required'],         [['logic_op'], 'safe'],         [['filter_value'], 'integer', 'on' => 'isint'],         [['filter_value'], 'string', 'min' => '2', 'max' => '75', 'on' => 'isstring'],         [['filter_value'], 'trim', 'on' => 'isstring'],         [['filter_value'], 'number', 'on' => 'isfloat'],         [['filter_value'], 'date', 'on' => 'isdate']         ]; } 

ok, give more detail, , i've decided drop idea of having validation set based on dropdown selection now. instead, needs set based on value i'm getting database when page gets loaded. have partial view file called '_settings.php' , gets rendered modal through view file called 'manage.php'. here code in _settings.php displays text boxes i'm trying validation work on:

foreach($crystalfields $field)             {              if($field['custom'] == 4)             {                                    $datatype = $model->getdatatypename($field['datatype']);                                             $filterstring = $form->field($model, 'filter_value', ['inputoptions' => ['id' =>'filterval'.$crystalid.'-'.$field['fieldid']]])                                                 ->textinput(['name' => 'filterval'.$crystalid.'-'.$field['fieldid']])                                                 ->label(false);                                  $filterstrings = $filterstrings.'<div class="form-group">                                                 <div class="form_group row">                                                     <label for="filterval'.$crystalid.'-'.$field['fieldid'].'" class="col-sm-3 control-label">'.$field['fieldname'].'</label>                                                         <div class="col-sm-6 pull-right">'.$filterstring.'</div>                                                 </div>                                             </div>';              } 

...there more foreach loop irrelevent. basically, want have validation text box set based on result of method $model->getdatatypename($field['datatype']) ... method part of model validation rules exist; however, primary key $field['datatype'] i'm passing method based on query joining many related tables in view model ..$model in case. when method passes 'string' want set validation accordingly. there can multiple of these text boxes within modal each have different validation types attached same 'filter_value' field each time.

i think easier solution here use when-functionality. gives fine control on whether rule should triggered:

public function rules() {     return [         [['freq_int', 'freq_unit_fk'], 'integer', 'message' => 'integer'],         [['freq_int', 'freq_unit_fk', 'filter_field_fk', 'arithmetic_op'], 'required'],         [['logic_op'], 'safe'],         [['filter_value'], 'integer', 'when' => function ($model) {return $model->logic_op == 'integer'; }],         [['filter_value'], 'string', 'min' => '2', 'max' => '75', 'when' => function ($model) {return $model->logic_op == 'string'; }],         [['filter_value'], 'trim', 'when' => function ($model) {return $model->logic_op == 'string'; }]],         [['filter_value'], 'number', 'when' => function ($model) {return $model->logic_op == 'float'; }]],         [['filter_value'], 'date', 'when' => function ($model) {return $model->logic_op == 'date'; }]]     ]; }  

Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -