/** * @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; }
/** * @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; }
/** * @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; }
/** * @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; }
/** * @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; }