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; }