Exemplo n.º 1
0
 private function validateModelType($model, $viewName = null)
 {
     $viewFile = DirectoryBuilder::getViewPath($this->getControllerName(), $this->getActionName(), $this->getAreaName(), $viewName);
     $viewContent = file_get_contents($viewFile);
     $typeRegex = '/@var\\s*.*\\s+(' . FrameworkConfig::VENDOR_NAMESPACE . '\\.*?)\\s+\\s*.*/';
     preg_match($typeRegex, $viewContent, $matches);
     if (!isset($matches[1])) {
         throw new \Exception('Invalid model type provided');
     }
     $typeGiven = get_class($model);
     $typeExpected = $matches[1];
     if ($typeGiven != $typeExpected) {
         throw new \Exception('Invalid type supplied');
     }
     return $viewFile;
 }
 public function dispatch()
 {
     if (!$_GET || !isset($_GET['uri'])) {
         header('Location: ' . FrameworkRoutingConfig::AUTHORIZED_REDIRECT);
         exit;
     }
     try {
         $this->_uriParseResult = $this->_router->processRequestUri($_GET['uri']);
         $fullControllerName = DirectoryBuilder::getControllerPath($this->_uriParseResult->getAreaName(), $this->_uriParseResult->getControllerName());
         $this->initController($fullControllerName);
         $bindingResult = BindingsResolver::resolveModelBinding($this->_controller, $this->_uriParseResult->getActionName());
         $this->_uriParseResult->addRequestParam($bindingResult);
         View::setAreaName($this->_uriParseResult->getAreaName());
         View::setControllerName($this->_uriParseResult->getControllerName());
         View::setActionName($this->_uriParseResult->getActionName());
         call_user_func_array([$this->_controller, $this->_uriParseResult->getActionName()], $this->_uriParseResult->getRequestParams());
     } catch (\Exception $exception) {
         echo $exception->getMessage();
     }
 }
 private function getValidRouteUri($areaName, $fullControllerName, $actionName)
 {
     if (!isset($this->getAppStructure()[$areaName])) {
         throw new \Exception("Area: {$areaName} not found.");
     }
     if (!isset($this->getAppStructure()[$areaName][$fullControllerName])) {
         throw new \Exception("Controller: {$fullControllerName} not found in area: " . $this->getAreaName());
     }
     if (!isset($this->getAppStructure()[$areaName][$fullControllerName][$actionName])) {
         throw new \Exception("Controller: {$fullControllerName} contains no method: {$actionName}");
     }
     $controller = DirectoryBuilder::extractControllerName($fullControllerName);
     $area = strtolower($areaName);
     $route = "{$area}/{$controller}/{$actionName}";
     return $route;
 }