/**
  * 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();
 }
Example #3
0
 /**
  * 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;
 }