Пример #1
0
/**
 * @return &array объект приложения
 */
function &construct()
{
    $Application = [];
    setMode($Application, php_sapi_name() == 'cli' ? MODE_CLI : MODE_WEB);
    $Config =& Config\construct();
    $Application[FIELD_CONFIG] = Config\get($Config, CONFIGURATION_SECTION);
    $ServiceManager =& ServiceManager\construct($Config);
    ServiceManager\set($ServiceManager, 'Application', $Application);
    setServiceManager($Application, $ServiceManager);
    Session\init(MemcachedFactory\create(ServiceManager\getFactory($ServiceManager, 'Memcached'), 'session'));
    // Объект запроса
    $Request =& Request\construct();
    ServiceManager\set($ServiceManager, 'Request', $Request);
    // Объект ответа
    $Response =& Response\construct($ServiceManager);
    ServiceManager\set($ServiceManager, 'Response', $Response);
    ServiceManager\setInvokable($ServiceManager, 'ExecutorRepository', function &(array &$ServiceManager) {
        $ExecutorRepository =& ExecutorRepository\construct(MemcachedFactory\create(ServiceManager\getFactory($ServiceManager, 'Memcached'), 'cache'), ServiceManager\getFactory($ServiceManager, 'Mysql'));
        return $ExecutorRepository;
    });
    ServiceManager\setInvokable($ServiceManager, 'CustomerRepository', function &(array &$ServiceManager) {
        $CustomerRepository =& CustomerRepository\construct(MemcachedFactory\create(ServiceManager\getFactory($ServiceManager, 'Memcached'), 'cache'), ServiceManager\getFactory($ServiceManager, 'Mysql'));
        return $CustomerRepository;
    });
    ServiceManager\setInvokable($ServiceManager, 'OrderRepository', function &(array &$ServiceManager) {
        $OrderRepository =& OrderRepository\construct(MemcachedFactory\create(ServiceManager\getFactory($ServiceManager, 'Memcached'), 'cache'), MysqlFactory\create(ServiceManager\getFactory($ServiceManager, 'Mysql'), 'order'));
        return $OrderRepository;
    });
    return $Application;
}
Пример #2
0
/**
 * @param array &$Config объект конфига
 *
 * @return &array объект ServiceManager
 */
function &construct(array &$Config)
{
    $smConfig =& Config\get($Config, CONFIGURATION_SECTION);
    if (!isset($smConfig[CONFIGURATION_FACTORIES])) {
        trigger_error('Нет списка фабрик', E_USER_ERROR);
    }
    $ServiceManager = [FIELD_CONFIG => $smConfig, FIELD_DATA => ['Config' => &$Config], FIELD_FACTORIES => [], FIELD_INVOKABLE => []];
    return $ServiceManager;
}
Пример #3
0
/**
 * @param array &$ServiceManager объект сервис-менеджер
 *
 * @return &array объект фабрики
 */
function &construct(array &$ServiceManager)
{
    $config =& Config\get(ServiceManager\get($ServiceManager, 'Config'), CONFIGURATION_SECTION);
    foreach ($config as $name => $pool) {
        if (count($pool) == 0) {
            trigger_error('Пустой пул серверов для мемкеша [' . $name . ']', E_USER_ERROR);
        }
        foreach ($pool as $server) {
            if (!isset($server[CONFIGURATION_HOST])) {
                trigger_error('Отсутствует параметр [' . CONFIGURATION_HOST . '] для мемкеша [' . $name . ']', E_USER_ERROR);
            }
            if (!isset($server[CONFIGURATION_PORT])) {
                trigger_error('Отсутствует параметр [' . CONFIGURATION_PORT . '] для мемкеша [' . $name . ']', E_USER_ERROR);
            }
        }
    }
    $MemcachedFactory = [FIELD_INSTANCES => [], FIELD_CONFIG => $config];
    return $MemcachedFactory;
}
Пример #4
0
/**
 * @param array &$ServiceManager объект сервис-менеджер
 *
 * @return &array объект фабрики
 */
function &construct(array &$ServiceManager)
{
    $config =& Config\get(ServiceManager\get($ServiceManager, 'Config'), CONFIGURATION_SECTION);
    if (isset($config[CONFIGURATION_INSTANCES])) {
        foreach ($config[CONFIGURATION_INSTANCES] as $name => $configuration) {
            validateInstanceConfig($name, $configuration);
        }
    }
    if (isset($config[CONFIGURATION_SHARD_INSTANCES])) {
        foreach ($config[CONFIGURATION_SHARD_INSTANCES] as $name => $configuration) {
            if (!is_array($configuration) || count($configuration) == 0) {
                trigger_error('Пустой конфиг для mysql шард-инстанса [' . $name . ']');
            }
            foreach ($configuration as $shard => $instance) {
                validateInstanceConfig($name, $instance, $shard);
            }
        }
    }
    $MysqlFactory = [FIELD_INSTANCES => [], FIELD_SHARD_INSTANCES => [], FIELD_CONFIG => $config];
    return $MysqlFactory;
}
Пример #5
0
/**
 * @param array &$Config объект конфига
 * @param array &$Request объект запроса
 * @param array &$Application объект приложения
 *
 * @return &array объект роута
 */
function &construct(array &$Config, array &$Request, array &$Application)
{
    $config = Config\get($Config, CONFIGURATION_SECTION);
    if (!isset($config[CONFIGURATION_WEB])) {
        trigger_error('Отсутствует конфигурация для web-режима', E_USER_ERROR);
    }
    if (!isset($config[CONFIGURATION_CLI])) {
        trigger_error('Отсутствует конфигурация для cli-режима', E_USER_ERROR);
    }
    foreach ($config[CONFIGURATION_WEB] as $name => $web) {
        if (!isset($web[CONFIGURATION_PATTERN])) {
            trigger_error('Отсутствует параметр [' . CONFIGURATION_PATTERN . '] для web роута [' . $name . ']', E_USER_ERROR);
        }
        if (!isset($web[CONFIGURATION_CONTROLLER])) {
            trigger_error('Отсутствует параметр [' . CONFIGURATION_CONTROLLER . '] для web роута [' . $name . ']', E_USER_ERROR);
        }
        if (!isset($web[CONFIGURATION_DEFAULT_ACTION])) {
            trigger_error('Отсутствует параметр [' . CONFIGURATION_DEFAULT_ACTION . '] для web роута [' . $name . ']', E_USER_ERROR);
        }
    }
    $Router = [FIELD_CONFIG => $config, FIELD_REQUEST => &$Request, FIELD_APPLICATION => &$Application, FIELD_ACTION_NAME => '', FIELD_CONTROLLER_NAME => '', FIELD_ROUTE_NAME => ''];
    return $Router;
}