TimestampBehavior::class, 'updatedAtAttribute' => false, ], [ 'class' => PrimaryKeyValueBehavior::class, 'value' => function() { return UserFriendlyRandomKey::make(); }, ], 'expirationBehavior' => [ 'class' => EmailActivationExpirationBehavior::class, 'repeatTimeout' => 5 * 60, // 5m 'expirationTimeout' => -1, ], 'dataBehavior' => [ 'class' => DataBehavior::class, 'attribute' => '_data', ], ]; } public function getAccount(): AccountQuery { return $this->hasOne(Account::class, ['id' => 'account_id']); } /** * @inheritdoc */ public static function instantiate($row) { $type = ArrayHelper::getValue($row, 'type'); if ($type === null) { return parent::instantiate($row); } $classMap = self::getClassMap(); if (!isset($classMap[$type])) { throw new InvalidConfigException('Unexpected type'); } return new $classMap[$type](); } public static function getClassMap(): array { return [ self::TYPE_REGISTRATION_EMAIL_CONFIRMATION => confirmations\RegistrationConfirmation::class, self::TYPE_FORGOT_PASSWORD_KEY => confirmations\ForgotPassword::class, self::TYPE_CURRENT_EMAIL_CONFIRMATION => confirmations\CurrentEmailConfirmation::class, self::TYPE_NEW_EMAIL_CONFIRMATION => confirmations\NewEmailConfirmation::class, ]; } }