/**
  * Returns the name of the called class without the namespace
  *
  * @return string
  */
 private function getNonNamespacedCalledClass()
 {
     return ClassHelper::getNonNamespacedClass(get_called_class());
 }
Example #2
0
 /**
  * Setup of the basic configuration for Silex and Salvo
  *
  * @param $application
  * @param $applicationRootDirectory
  */
 private function __construct(Application $application, $applicationRootDirectory)
 {
     self::$applicationRootDirectory = $applicationRootDirectory;
     //load configurations
     $application['app_config'] = Yaml::parse(self::$applicationRootDirectory . '/configuration/application.yml');
     $application['routes_config'] = Yaml::parse(self::$applicationRootDirectory . '/configuration/routes.yml');
     #selix configurations
     $application['debug'] = $application['app_config']['debug'];
     //setup the root redirect using the app_config setting
     $application->get('/', function () use($application) {
         return $application->redirect($application['routes_config']['root_redirect']);
     });
     //setup absolute routes
     if (!empty($application['routes_config']['absolute_routes'])) {
         foreach ($application['routes_config']['absolute_routes'] as $route) {
             if (empty($route['namespaced_class'])) {
                 throw new \Exception('No namespaced class configured for route ' . $route['route']);
             }
             $namespacedClass = $route['namespaced_class'];
             $method = !empty($route['method']) ? $route['method'] : 'get';
             $controllerAction = $namespacedClass . '::' . $route['action'] . 'Action';
             $routeObject = $application->match($route['route'], $controllerAction)->method(strtoupper($method))->bind($route['name']);
             RouteHelper::parametrize($routeObject, $route['parameters']);
         }
     }
     //load all configured services providers
     if (is_array($application['app_config']['service_providers']) && !empty($application['app_config']['service_providers'])) {
         foreach ($application['app_config']['service_providers'] as $serviceName => $serviceConfiguration) {
             //build the parameter list
             $parameters = array();
             if (!empty($serviceConfiguration['parameters']) && is_array($serviceConfiguration['parameters'])) {
                 foreach ($serviceConfiguration['parameters'] as $key => $value) {
                     $parameters[$serviceName . '.' . $key] = ($key == 'path' || strpos($key, '_path') !== false) && substr($value, 0, 1) != '/' ? self::$applicationRootDirectory . '/' . $value : $value;
                 }
             }
             if (!empty($serviceConfiguration['options']) && is_array($serviceConfiguration['options'])) {
                 $parameters[$serviceName . '.options'] = $serviceConfiguration['options'];
             }
             //include the service provider file for provider not included in silex itself
             if (!empty($serviceConfiguration['file_path'])) {
                 require_once self::$applicationRootDirectory . '/' . $serviceConfiguration['file_path'];
             }
             //register the service provider
             $serviceClassName = $serviceConfiguration['class_name'];
             $application->register(new $serviceClassName(), $parameters);
         }
     }
     //mount all configured controllers
     if (is_array($application['routes_config']) && !empty($application['routes_config'])) {
         foreach ($application['routes_config'] as $key => $controllerConfiguration) {
             //only process configuration ending in Controller
             if (substr($key, -10) == 'Controller') {
                 $class = $controllerConfiguration['namespaced_class'];
                 $application->mount('/' . $controllerConfiguration['base_route'], new $class());
             }
         }
     }
     //setup all the logging
     if (is_array($application['app_config']['loggers']) && !empty($application['app_config']['loggers'])) {
         foreach ($application['app_config']['loggers'] as $name => $settings) {
             $application[$name] = $application->share(function () use($name, $settings, $applicationRootDirectory) {
                 //determine the logging level
                 $level = !empty($settings['level']) ? 'Monolog\\Logger::' . strtoupper($settings['level']) : 'Monolog\\Logger::CRITICAL';
                 $level = constant($level);
                 $logger = new Logger($name);
                 $logger->pushHandler(new StreamHandler($applicationRootDirectory . '/' . $settings['file_path'], $level));
                 return $logger;
             });
         }
     }
     $application->before(function ($event) use($application) {
         //make sure that the controller in a class
         $controller = $event->attributes->get('_controller');
         $application['requested_controller'] = null;
         $application['requested_action'] = null;
         //var_dump($event);
         if (is_string($controller) && strpos($controller, '::') !== false) {
             //set the requested controller and action
             $controllerParts = explode('::', $controller);
             $application['requested_controller'] = substr(ClassHelper::getNonNamespacedClass($controllerParts[0]), 0, -10);
             $application['requested_action'] = substr($controllerParts[1], 0, -6);
         }
     }, Application::LATE_EVENT);
     //make sure the session is saved
     $application->after(function ($event) use($application) {
         $application['session']->save();
     }, Application::LATE_EVENT - 100);
     self::$application = $application;
     //apply bootstrap objects
     if (!empty($application['app_config']['bootstrap'])) {
         foreach ($application['app_config']['bootstrap'] as $bootstrap) {
             $this->applyBootstrap(new $bootstrap['class_name']());
         }
     }
 }