"Адрес", 'module_install_angle' => "Угол установки фотомодулей", 'latitude' => "Широта", 'longitude' => "Долгота", 'south_deviation' => "Отклонение от юга", 'power_station_type' => "Тип станции", 'area' => "Площадь", 'power' => "Мощность", 'budget' => "Бюджет", 'auth_day' => "Суточное потребление в кВт*ч", 'auth_month' => "Месячное потребление в кВт*ч", 'auth_pwr_all' => "Мощность всех потребителей потребление в кВт*ч", 'auth_pwr_days' => "Суток автономности", ]; public $attributeValues = []; public function __set($name, $value) { if (in_array($name, self::calculator_attributes)) { if (isset($value) && !empty($value)) { $this->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', 'phone', 'message', 'returnUrl', 'topic', ], parent::SCENARIO_CALLBACK => [ 'name', 'phone', 'message', 'returnUrl', 'topic', ], self::SCENARIO_CALCULATOR => array_merge( [ 'name', 'phone', 'email', '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', 'calc_json_info', 'adress', 'module_install_angle', ], 'required', 'on' => self::SCENARIO_CALCULATOR, ], [ [ 'name', 'email', 'phone', ], 'required', 'message'=>Yii::t('app','requiredField'), 'on' => self::SCENARIO_DEFAULT, ], [ [ 'name', 'email', 'phone' ], 'required', 'message'=>Yii::t('app','requiredField'), 'on' => self::SCENARIO_FEEDBACK, ], [ ['phone'], 'string', 'length'=>[10,17], 'message'=>'Введите данные в форму согласно заданному шаблону: +38(132) 456 78 89', 'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT] ], //[['phone'],'match','pattern'=>'/\+3?8?\(?([\d]{3}([ .-]?))\)?([ .-]?)([\d]{3}([ .-]?))\2([\d]{2}([ .-]?))([\d]{2}([ .-]?))/','message'=>'некорректный ввод поля. Значение должно иметь вид: +38(123) 456 78 79'], [ ['name'], 'string', 'length'=>[2,25], 'tooShort'=>Yii::t('app','lowName'), 'tooLong'=>Yii::t('app','upName'), 'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT] ], [ ['email'], 'string', 'max'=>25, 'tooLong'=>\Yii::t('app','upEmail'), 'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT] ], [ ['name'], 'match', 'pattern' => '/^[а-яА-ЯёЁa-zA-Z\-\s]+$/', 'message'=> \Yii::t('app', 'wrongName'), 'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT] ], [ ['email'], 'email', 'message'=>\Yii::t('app','wrongEmail'), 'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT] ], [ [ 'status', ], 'boolean', ], [ 'returnUrl', 'safe', ], ] ); } public function setCalcJsonInfo() { $this->calc_json_info = json_encode($this->attributeValues); } public function getCalcJsonInfo() { return json_decode($this->calc_json_info); } }