public function __construct() { echo 'Test model loaded.' . PHP_EOL; $database = new Framework\Database(array("type" => "mysql", "options" => array("host" => "localhost", "username" => "root", "password" => "root", "schema" => "prophpmvc"))); $database = $database->initialize(); $database = $database->connect(); Framework\Registry::set("database", $database); self::runAll(); }
/** * Запуск приложения * * @param array $configArray Массив конфигурации * @throws \Exception */ public static function run(array $configArray) { $request = new Request(); $config = new Config($configArray); Registry::set('request', $request); Registry::set('config', $config); Registry::set('pdo', new PDO('mysql:host=' . $config->get('db')['host'] . ';dbname=' . $config->get('db')['dbname'] . ';charset=utf8', $config->get('db')['user'], $config->get('db')['passwd'])); $routing = new Routing($request->server('REQUEST_URI')); Registry::set('routing', $routing); $routing->run(); }
public static function connect() { $mongoDB = Registry::get("MongoDB"); if (!$mongoDB) { require_once APP_PATH . '/application/libraries/vendor/autoload.php'; $configuration = Registry::get("configuration"); try { $dbconf = $configuration->parse("configuration/database")->database->mongodb; $mongo = new \MongoDB\Client("mongodb://" . $dbconf->dbuser . ":" . $dbconf->password . "@" . $dbconf->url . "/" . $dbconf->dbname . "?replicaSet=" . $dbconf->replica . "&ssl=true"); $mongoDB = $mongo->selectDatabase($dbconf->dbname); } catch (\Exception $e) { throw new \Framework\Database\Exception("DB Error"); } Registry::set("MongoDB", $mongoDB); } return $mongoDB; }
protected function _pass($controller, $action, $parameters = array()) { $name = ucfirst($controller); $this->_controller = $controller; $this->_action = $action; try { $instance = new $name(array("parameters" => $parameters)); Registry::set("controller", $instance); } catch (\Framework\Database\Exception $e) { throw new \Framework\Database\Exception($e->getMessage()); } catch (\Exception $e) { throw new Exception\Controller("Controller {$name} not found " . $name); } if (!method_exists($instance, $action)) { $instance->willRenderLayoutView = false; $instance->willRenderActionView = false; throw new Exception\Action("Action {$action} not found"); } $inspector = new Inspector($instance); $methodMeta = $inspector->getMethodMeta($action); if (!empty($methodMeta["@protected"]) || !empty($methodMeta["@private"])) { throw new Exception\Action("Action {$action} not found"); } $hooks = function ($meta, $type) use($inspector, $instance) { if (isset($meta[$type])) { $run = array(); foreach ($meta[$type] as $method) { $hookMeta = $inspector->getMethodMeta($method); if (in_array($method, $run) && !empty($hookMeta["@once"])) { continue; } $instance->{$method}(); $run[] = $method; } } }; $hooks($methodMeta, "@before"); call_user_func_array(array($instance, $action), is_array($parameters) ? $parameters : array()); $hooks($methodMeta, "@after"); // unset controller to fire the __destruct magic method Registry::erase("controller"); }
protected function mongod() { $mongod = Registry::get("mongod"); if ($mongod) { return $mongod; } else { $cache = new \Framework\Cache(array("type" => "mongod")); $m = $cache->initialize(); $m->connect('healthlitmus'); Registry::set("mongod", $m); return $m; } }
/** * Offers the solution to storage that can be accessed from everywhere. * @param type $key * @param type $value */ protected function _setValue($key, $value) { if (!empty($key)) { $data = Registry::get($this->defaultKey, array()); $data[$key] = $value; Registry::set($this->defaultKey, $data); } }
public function __construct($options = array()) { parent::__construct($options); // connect to database $database = Registry::get("database"); $database->connect(); $mongoDB = Registry::get("MongoDB"); if (!$mongoDB) { $mongo = new \MongoClient(); $mongoDB = $mongo->selectDB("stats"); Registry::set("MongoDB", $mongoDB); } // schedule: load user from session Events::add("framework.router.beforehooks.before", function ($name, $parameters) { $session = Registry::get("session"); $controller = Registry::get("controller"); $user = $session->get("user"); if ($user) { $controller->user = \User::first(array("id = ?" => $user)); } }); // schedule: save user to session Events::add("framework.router.afterhooks.after", function ($name, $parameters) { $session = Registry::get("session"); $controller = Registry::get("controller"); if ($controller->user) { $session->set("user", $controller->user->id); } }); // schedule: disconnect from database Events::add("framework.controller.destruct.after", function ($name) { $database = Registry::get("database"); $database->disconnect(); }); }
/** * Вызвать действие контроллера * * @param string $action Действие * @param string $controller Контроллер * @param string $module Модуль * @param array $params Параметры */ public static function action($action, $controller, $module, array $params = []) { $routing = Registry::get('routing'); $request = Registry::get('request'); $routing->setAction($action); $routing->setController($controller); $routing->setModule($module); $request->setParams($params); Registry::set('request', $request); $routing->run(); }
/** * Load a controller * @return boolean|string */ private function _loadController($method, $controller, $action, $parameters = array()) { $name = ucfirst($controller); $this->_controller = $controller; $this->_action = $action; Event::fire("framework.router.controller.before", array($controller, $parameters)); try { $instance = new $name(array("parameters" => $parameters)); Registry::set("controller", $instance); } catch (\Exception $e) { throw new \Exception("Controller {$name} not found", 404); } Event::fire("framework.router.controller.after", array($controller, $parameters)); if (!empty($action)) { // If request method valid append to action if ($this->_validateRequestMethod($method)) { $action = strtolower($method) . ucfirst($action); } // Check if called method exists if (!method_exists($instance, $action)) { throw new \Exception("Action {$action} not found", 404); } // Check if method is callable (checking for @protected or @private) $inspector = new Inspector($instance); $methodMeta = $inspector->getMethodMeta($action); if (!empty($methodMeta["@protected"]) || !empty($methodMeta["@private"])) { throw new \Exception("Action {$action} not found", 404); } } $hooks = function ($meta, $type) use($inspector, $instance) { if (isset($meta[$type])) { $run = array(); foreach ($meta[$type] as $method) { $hookMeta = $inspector->getMethodMeta($method); if (in_array($method, $run) && !empty($hookMeta["@once"])) { contiue; } $instance->{$method}(); $run[] = $method; } } }; Event::fire("framework.router.beforehooks.before", array($action, $parameters)); $hooks($methodMeta, "@before"); Event::fire("framework.router.beforehooks.after", array($action, $parameters)); Event::fire("framework.router.action.before", array($action, $parameters)); // Call Method or resort to default switch (true) { case !empty($action): call_user_func_array(array($instance, $action), is_array($parameters) ? $parameters : array()); break; default: call_user_func_array(array($instance, $this->_defaultAction), is_array($parameters) ? $parameters : array()); break; } Event::fire("framework.router.action.after", array($action, $parameters)); Event::fire("framework.router.afterhooks.before", array($action, $parameters)); $hooks($methodMeta, "@after"); Event::fire("framework.router.afterhooks.after", array($action, $parameters)); // unset controller Registry::erase("controller"); }
/** * Установить параметры для объекта запроса */ private function setRequestParams() { $request = Registry::get('request'); if ($request) { $request->setModule($this->getModule()); $request->setController($this->getController()); $request->setAction($this->getAction()); $request->initUriStringParams(); Registry::set('request', $request); } }