Esempio n. 1
0
 /**
  * @param Container $di
  * @param string    $path
  *
  * @throws \Graphite\Di\Exception
  */
 public function __construct(Container $di, $path = '')
 {
     $this->di = $di;
     $this->modulesManager = $di->get('ModulesManager');
     $this->eventsManager = $di->get('EventsManager');
     $this->request = $di->get('Request');
     $this->setBasePath($path);
 }
Esempio n. 2
0
 /**
  * Find & load controller class depends on Request params
  *
  * @return array
  *
  * @throws Exception
  */
 private function resolveController()
 {
     /** @var \Graphite\Std\Properties $params */
     $params = $this->di->get('Request')->getParams();
     /** @var $modules ModulesManager */
     $modules = $this->di->get('ModulesManager');
     $moduleName = ucfirst($params->get('module'));
     if (!$modules->hasModule($moduleName)) {
         throw new Exception('Cant find module "' . $moduleName . '"');
     }
     $module = $modules->getModule($moduleName);
     $ctrlName = ucfirst($params->get('controller')) . 'Controller';
     $ctrlFile = $module->getControllersPath() . '/' . $ctrlName . '.php';
     $ctrlClass = "\\Modules\\{$moduleName}\\Controller\\{$ctrlName}";
     if (!file_exists($ctrlFile)) {
         throw new Exception('Cant find controller file "' . $ctrlFile . '"');
     }
     require_once $ctrlFile;
     $ctrl = new $ctrlClass($module, $this->di);
     if (!$ctrl instanceof AbstractController) {
         throw new Exception('Controller class must be instance of AbstractController');
     }
     $actionName = $params->get('action') . 'Action';
     if (!method_exists($ctrl, $actionName)) {
         throw new Exception("{$ctrlName} does not have action {$actionName}");
     }
     return array('controller' => $ctrl, 'action' => $actionName);
 }
Esempio n. 3
0
 /**
  * @param AbstractModule $module
  * @param Container $di
  */
 public function __construct(AbstractModule $module, Container $di)
 {
     $this->module = $module;
     $this->di = $di;
     $this->request = $this->di->get('Request');
 }