I’m creating list of text input boxes using loop. How to get value from each field and implement basic validation like input cannot left blanked and minimum length of input string should be 20.
I try this code but the custom validation to check minimum length of input string is not working.
view code
$arr = array("config", "specs");
for($i=0; $i<count($arr); $i++){
echo '<h3>' . $arr[$i] . '</h3>';
for($j=0; $j<3; $j++){
echo $form->field($model, "$arr[$i][$j]")->label(false);
}
}
Model code:
public $config;
public $specs;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['config', 'specs'], 'required'],
[['config', 'specs'], 'validateSpecs']
];
}
public function validateSpecs($attribute, $params)
{
if(!is_array($this->$attribute) || count(array_filter($this->$attribute)) != 3){
$this->addError($attribute, 'Error: Invalid input');
} else{
foreach ($this->$attribute as $key=>$value){
if(!is_string($value) || strlen($value) < 20){
$this->addError($attribute, 'Error: Invalid input');
}
}
}
}