attributeValues[$name] = $value; } } else{ parent::__set($name, $value); } } public function __get($name) { if(in_array($name, self::calculator_attributes)){ return $this->attributeValues[$name]??''; } else{ return parent::__get($name); } } public function getCalculatorAttributes(){ return $this->attributeValues; } public function scenarios() { return array_merge( parent::scenarios(), [ parent::SCENARIO_FEEDBACK => [ 'name', 'email', 'message', 'returnUrl', 'topic', ], parent::SCENARIO_CALLBACK => [ 'name', 'phone', 'message', 'returnUrl', 'topic', ], self::SCENARIO_CALCULATOR => array_merge( [ 'name', 'phone', 'returnUrl', 'topic', 'calc_json_info', ], self::calculator_attributes ) ] ); } public function rules() { return array_merge( parent::rules(), [ [ [ 'topic', ], 'required', ], [ [ 'topic', ], 'string', 'max' => 100, ], [ [ 'name', 'phone', 'email', 'topic', 'calc_json_info', 'adress', 'module_install_angle' ], 'required', 'on' => self::SCENARIO_CALCULATOR, ] ] ); } public function setCalcJsonInfo() { $this->calc_json_info = json_encode($this->attributeValues); } public function getCalcJsonInfo() : array { return json_decode($this->calc_json_info); } }