Esempio n. 1
0
 /**
  * Возвращает true при успешной операции или строку с ошибкой
  *
  * @param $money
  * @param $recipient
  *
  * @return bool|string
  *
  * @throws Exception
  */
 public static function sendMoney($money, $recipient)
 {
     // Проверка входных данных (только положительные числа)
     if (!preg_match('/^\\d*\\.?\\d*$/', $money)) {
         return 'Введите положительное число';
     }
     $transaction = Yii::$app->db->beginTransaction();
     $transaction->setIsolationLevel('SERIALIZABLE');
     try {
         // Вычесть деньги у отправителя
         Users::sendMoney($money, Yii::$app->user->id);
         // Прибавить полуателю
         Users::addMoney($money, $recipient);
         // Записать операцию
         $operation = new self();
         $operation->sum = $money;
         $operation->recipient = $recipient;
         $operation->link('sender', Users::findOne(Yii::$app->user->id));
         $transaction->commit();
         // Ошибок нет
         return true;
     } catch (OperationException $e) {
         $transaction->rollback();
         return $e->getMessage();
     } catch (Exception $e) {
         $transaction->rollback();
         if (YII_DEBUG) {
             throw $e;
         } else {
             return 'Неизвестная ошибка';
         }
     }
 }