/** * __construct * * Paulus constructor * * @param array $config Configuration array defining Paulus' many options * @access public * @return Paulus */ public function __construct(array $config = null) { // First things first... get our init time if (!defined('PAULUS_START_TIME')) { define('PAULUS_START_TIME', microtime(true)); } // Define our application's constants $this->define_constants(); // Set our application's configuration from our Config instance $this->config = Config::instance(); // If we passed a config, let's merge it in if (!is_null($config)) { Config::instance()->merge_custom_config($config); } // Create our auto loader $autoloader = new AutoLoader($this->config); // Load our all-important routing library $autoloader->load_routing_library(); // Create a "first-hit" route responder to setup our app Router::route(function ($request, $response, $service) { // Initialize our router's interval values Router::__init__($request, $response, $service, $this); // Set some properties from our router $this->request =& $request; $this->response =& $response; $this->service =& $service; // Initialize some response properties $this->init_response_properties(); // Setup our exception handler $this->setup_exception_handler(); // Handle any JSON request bodies $this->handle_json_request(); // Only pass our "app" to the service register if we've configured it to do so if ($this->config['routing']['pass_app_to_service']) { // Register our app as a persistent service, for ease of use/accessibility $service->app = $this; } }); // If there are autoload directories set if (isset($this->config['autoload-directories']) && count($this->config['autoload-directories']) > 0) { // Register our external autoloader $autoloader->register_external_autoloader(); } // Load any set external libraries explicitly if (isset($this->config['external-libs']) && count($this->config['external-libs']) > 0) { // Load our external libraries explicitly $autoloader->explicitly_load_externals(); } // Let's setup our database connection $this->setup_db_connection(); // Load and define all of our routes $autoloader->load_routes(); }