/** * inicializa a aplicação * @param array $configuration array com os caminhos de cada arquivo de configuração do framework */ public function __construct(array $configuration) { try { $this->config = Config::getInstance(); $this->config->setConfiguration($configuration); } catch (\Exception $e) { throw new \Exception($e->getMessage()); } }
/** * Controller abstrato baseado em actions */ public function __construct() { $this->config = Config::getInstance(); $this->twigVariables = array(); }
/** * Interpreta uma rota. Se o parâmetro não for passado, utiliza a rota atual (url do navegador) * @param string $route a rota a ser interpretada * @return array dados da rota * @throws \Exception * @throws \AMTFramework\MVC\Exception\RouteNotFoundException */ public static function parseRoute($route = '') { if (strlen(trim($route)) == 0) { $route = self::getCurrentRoute(); } $config = Config::getInstance(); $route = preg_replace('/^\\/|\\/$/', '', $route); $routeParts = explode('/', $route); $emptyBaseRouteOwner = null; $baseRoutesSorted = array(); try { $baseRoutes = self::getBaseRoutes(); } catch (\Exception $e) { throw $e; } foreach ($baseRoutes as $projectName => $projectArray) { foreach ($projectArray as $moduleName => $moduleArray) { foreach ($moduleArray as $baseRoute) { $baseRoutesSorted[$baseRoute] = array('project' => $projectName, 'module' => $moduleName); if (strcasecmp($baseRoute, '/') === 0) { $emptyBaseRouteOwner = array('project' => $projectName, 'module' => $moduleName); } } } } krsort($baseRoutesSorted); $matches = array(); $params = array(); foreach ($baseRoutesSorted as $baseRoute => $baseRouteArray) { $moduleName = $baseRouteArray['module']; $projectName = $baseRouteArray['project']; $baseRoute = preg_replace('/^\\/|\\/$/', '', $baseRoute); $copyRouteParts = $routeParts; while (count($copyRouteParts) > 0) { $currentRoute = implode('/', $copyRouteParts); if (strcmp($baseRoute, $currentRoute) === 0) { foreach ($config->projects[$projectName]['modules_config'][$moduleName]['routing']['routes'] as $arrayModuleRoute) { $moduleRoute = preg_replace('/^\\/|\\/$/', '', $arrayModuleRoute['route']); if (preg_match(self::createRouteRegex('/' . $moduleRoute), '/' . $route, $matches) === 1) { foreach ($matches as $key => $value) { if (is_int($key)) { unset($matches[$key]); } } $arrayModuleRoute['module'] = $moduleName; $arrayModuleRoute['project'] = $projectName; $params['params'] = $matches; return array_merge($params, $arrayModuleRoute); } } throw new RouteNotFoundException('Rota não encontrada', $projectName, $moduleName); } array_pop($copyRouteParts); } } if (!is_null($emptyBaseRouteOwner)) { foreach ($config->projects[$emptyBaseRouteOwner['project']]['modules_config'][$emptyBaseRouteOwner['module']]['routing']['routes'] as $arrayModuleRoute) { $moduleRoute = preg_replace('/^\\/|\\/$/', '', $arrayModuleRoute['route']); if (preg_match(self::createRouteRegex('/' . $moduleRoute), '/' . $route, $matches) === 1) { foreach ($matches as $key => $value) { if (is_int($key)) { unset($matches[$key]); } } $arrayModuleRoute['module'] = $emptyBaseRouteOwner['module']; $arrayModuleRoute['project'] = $emptyBaseRouteOwner['project']; $params['params'] = $matches; return array_merge($params, $arrayModuleRoute); } } } if (!is_null($emptyBaseRouteOwner)) { throw new RouteNotFoundException('Rota não encontrada', $emptyBaseRouteOwner['project'], $emptyBaseRouteOwner['module']); } throw new RouteNotFoundException('Rota não encontrada'); }
/** * obtém um entity manager do doctrine 2 * @param string $entityManagerName nome do entity manager * @return \Doctrine\ORM\EntityManager * @throws \Exception */ public static function get($entityManagerName = '') { $framework_config = Config::getInstance(); $isDevMode = isset($framework_config->projects[self::$project]['development_mode']) ? $framework_config->projects[self::$project]['development_mode'] : false; $connectionType = $isDevMode ? 'development' : 'production'; $paths = array(); if (strlen(trim($entityManagerName)) == 0) { if (isset($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['default']) && strlen(trim($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['default'])) > 0) { $entityManagerName = $framework_config->projects[self::$project]['doctrine_configuration']['configuration']['default']; } else { throw new \Exception('Não foi especificado o nome do entity manager, adicionalmente, um entity manager padrão não está configurado'); } } if (!isset($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName])) { throw new \Exception('O entity manager com o nome "' . $entityManagerName . '" não foi encontrado na configuração'); } if (isset($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['connection']) && strlen(trim($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['connection'])) > 0) { $connectionName = $framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['connection']; } else { if (isset($framework_config->projects[self::$project]['doctrine_configuration']['connection']['default']) && strlen(trim($framework_config->projects[self::$project]['doctrine_configuration']['connection']['default'])) > 0) { $connectionName = $framework_config->projects[self::$project]['doctrine_configuration']['connection']['default']; } else { throw new \Exception('Não foi especificada uma conexão para o entity manager "' . $entityManagerName . '", adicionalmente, não foi configurada uma conexão padrão'); } } foreach ($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['paths'] as $path) { $paths[] = $path; } $proxyDir = isset($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['proxy_dir']) ? trim($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['proxy_dir']) : null; $proxyNamespace = isset($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['proxy_namespace']) ? trim($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['proxy_namespace']) : null; switch (strtolower($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['method'])) { case 'annotation': if (strlen($proxyDir) > 0) { $config = Doctrine2Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir); } else { $config = Doctrine2Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); } break; case 'xml': if (strlen($proxyDir) > 0) { $config = Doctrine2Setup::createXMLMetadataConfiguration($paths, $isDevMode, $proxyDir); } else { $config = Doctrine2Setup::createXMLMetadataConfiguration($paths, $isDevMode); } break; case 'yaml': if (strlen($proxyDir) > 0) { $config = Doctrine2Setup::createYAMLMetadataConfiguration($paths, $isDevMode, $proxyDir); } else { $config = Doctrine2Setup::createYAMLMetadataConfiguration($paths, $isDevMode); } break; default: throw new \Exception('Método inválido de configuração do Doctrine: ' . strtolower($framework_config->projects[self::$project]['doctrine_configuration']['configuration']['entity_manager'][$entityManagerName]['method'])); } if ($proxyNamespace) { $config->setProxyNamespace($proxyNamespace); } $conn = $framework_config->projects[self::$project]['doctrine_configuration']['connection'][$connectionType][$connectionName]; $entityManager = Doctrine2EntityManager::create($conn, $config); return $entityManager; }