public function authorize() { $container = ApplicationManager::getInstance()->getContainer(); $roleProvider = $container->resolve('RoleProvider'); if (!isset($_SESSION['userId'])) { http_response_code(403); die; } $userId = $_SESSION['userId']; $userRoles = $roleProvider->getUserRoles($userId); if (count(array_intersect($userRoles, $this->allowedRoles)) == 0) { http_response_code(403); die; } }
public static function executeAction($controllerName, $actionName, $actionParams, $areaName) { $manager = ApplicationManager::getInstance(); $controllerFactory = $manager->getControllerFactory(); $viewEngine = $manager->getViewEngine(); $controller = $controllerFactory->createController($controllerName, $areaName); $helper = new AnnotationHelper(new AnnotationFactory()); $controllerAnnotations = $helper->extractAnnotations(get_class($controller)); $actionAnnotations = $helper->extractAnnotations(get_class($controller), $actionName); $annotationProcessor = new AnnotationProcessor(); $annotationProcessor->processAnnotations($controllerAnnotations); $annotationProcessor->processAnnotations($actionAnnotations); $invoker = new ActionInvoker($controller, $actionName, $actionParams); $actionArgs = $invoker->processBinding(); $actionResult = $invoker->executeAction($actionArgs); $resultHandler = new ActionResultHandler($viewEngine, $areaName); $resultHandler->handleResult($actionResult); }
public function createController($controllerName, $area) { if (is_null($area)) { $class = 'Controllers\\' . ucfirst($controllerName) . 'Controller'; } else { $class = 'Areas\\' . $area . '\\Controllers\\' . ucfirst($controllerName) . 'Controller'; } if (class_exists($class)) { $container = ApplicationManager::getInstance()->getContainer(); return $container->resolve($class); // $reflection = new \ReflectionClass($class); // $constructor = $reflection->getMethod('__construct'); // $constructorParams = $constructor->getParameters(); // $constructorArgs = array(); // foreach ($constructorParams as $param) { // $paramInstance = $container->resolve($param->getClass()->name); // array_push($constructorArgs, $paramInstance); // } // return $reflection->newInstanceArgs($constructorArgs); } throw new \InvalidArgumentException('No controllers matching this name are found.'); }
public function registerAnnotationRoutes() { $areas = ApplicationManager::getInstance()->getAreas(); $controllers = array(); foreach ($areas as $area) { $controllers = array_merge($controllers, $this->getClasses('Areas' . DS . $area . DS . 'Controllers')); } $controllers = array_merge($controllers, $this->getClasses('Controllers')); foreach ($controllers as $controller) { $areaName = $this->getAreaName($controller); $controllerName = $this->getControllerName($controller); $controllerName = str_replace('Controller', '', $controllerName); $routeAnnotations = $this->getRouteAnnotations($controller); foreach ($routeAnnotations as $annotationData) { $actionName = $annotationData[0]; $routeAnnotation = $annotationData[1]; $routePath = $routeAnnotation->getRoutePath(); $route = new Route($routePath, $controllerName, $actionName, $areaName); $this->registerRoute($route); } } }
#include_once('Bootstrap.php'); use Core\Routing\RoutingEngine; use Core\ResultExecution\ViewEngine; use Core\Controllers\ControllerFactory; use Core\Container; use Core\RequestPipeline; use Core\ApplicationManager; define('DS', DIRECTORY_SEPARATOR); define('ROOT_PATH', basename(dirname(dirname(__FILE__))) . DS); define('ROOT', dirname(dirname(__FILE__)) . DS); define('ROOT_URL', 'http://' . $_SERVER['HTTP_HOST'] . DS); define('APP_ROOT_URL', ROOT_URL . ROOT_PATH); spl_autoload_register(function ($class) { $classPath = str_replace("\\", "/", $class); require_once dirname(__DIR__) . DS . $classPath . '.php'; }); session_start(); $appManager = ApplicationManager::getInstance(); $appManager->setControllerFactory(new ControllerFactory()); $appManager->setViewEngine(new ViewEngine()); $appManager->setContainer(new Container()); $appManager->setRoutingEngine(new RoutingEngine()); ApplicationConfig::initializeComponents($appManager); ApplicationConfig::registerAreas($appManager); ApplicationConfig::bootstrap(); $routingEngine = $appManager->getRoutingEngine(); $routingEngine->registerAnnotationRoutes(); ApplicationConfig::routeConfig($appManager->getRoutingEngine()); ApplicationConfig::registerBindings($appManager->getContainer()); RequestPipeline::execute(); die;