В проект внедрён RabbitMQ.

Контроллер для работы с RabbitMQ научился создавать типизированные аргументы для $body
Добавлена таблица с историей ников
Добавлена таблица Mojang ников
Добавлена проверка активированности аккаунта в AccountsController
This commit is contained in:
ErickSkrauch
2016-04-23 21:44:10 +03:00
parent 067fc1d3d6
commit cba769a1ec
24 changed files with 489 additions and 47 deletions

View File

@@ -2,6 +2,7 @@
namespace common\components\RabbitMQ;
use PhpAmqpLib\Message\AMQPMessage;
use ReflectionMethod;
use Yii;
use yii\db\Exception;
use yii\helpers\ArrayHelper;
@@ -95,7 +96,7 @@ abstract class Controller extends \yii\console\Controller {
private function getResult($method, $body, $msg) {
try {
$result = $this->$method($body, $msg);
$result = $this->$method($this->prepareArguments($method, $body), $msg);
} catch(Exception $e) {
if (strstr($e->getMessage(), '2006 MySQL server has gone away') !== false) {
Console::output(Console::ansiFormat('Server gone away, try to reconnect', [Console::FG_GREY]));
@@ -111,6 +112,35 @@ abstract class Controller extends \yii\console\Controller {
return $result;
}
private function prepareArguments($methodName, $body) {
$method = new ReflectionMethod($this, $methodName);
$parameters = $method->getParameters();
if (!isset($parameters[0])) {
return $body;
}
$bodyParam = $parameters[0];
if (PHP_MAJOR_VERSION === 7) {
// TODO: логика для php7 не тестировалась, так то не факт, что оно взлетит на php7
if (!$bodyParam->hasType() || $bodyParam->isArray()) {
return $body;
}
$type = (string)$bodyParam->getType();
$object = new $type;
} else {
$class = $bodyParam->getClass();
if ($class === null) {
return $body;
}
$type = $class->name;
$object = new $type;
}
return Yii::configure($object, $body);
}
/**
* Список аргументов, с которым будет вызван метод \PhpAmqpLib\Channel\AMQPChannel::exchange_declare()
* По умолчанию создаётся очередь с типом fanout. Кроме того, в отличие от стандартных аргументов,