public function redirect($url) { $request = DIContainer::build('request'); header('Referer: ' . $request->getURI()); header('Location: ' . $url, false, 301); die; }
/** * Run controller action * * @param $controller * @param $action * @param null $params * @return Response|mixed|null */ public function runControllerAction($controller, $action, $params = null) { $result = null; try { if (class_exists($controller)) { $action = $action . 'Action'; $param_values = $params; $meta_controller = new \ReflectionClass($controller); if ($meta_controller->hasMethod($action)) { $method = new \ReflectionMethod($controller, $action); $params = $method->getParameters(); $response = empty($params) ? $method->invoke(DIContainer::build($controller)) : $method->invokeArgs(DIContainer::build($controller), $param_values); $result = $response; } } else { throw new \Exception(self::ROUTE_NOT_FOUND, 404); } } catch (\Exception $e) { $result = $this->renderError($e); } return $result; }
/** * Render data * * @param $view * @param array $data * @return string */ public static function renderIt($view, array $data) { self::$_layout = $view; self::$_data = !empty($data) ? $data : array(); $router = DIContainer::build('router'); $app = DIContainer::build('app'); $config = DIContainer::build('config'); $funCurRoute = $router->findRoute(); $funGetRoute = function ($route_name, $params = null) use($router) { return $router->generateRoute($route_name, $params); }; $funDoAction = function ($class_name, $action, $params) use($app) { $response = $app->runControllerAction($class_name, $action, $params); if (is_object($response)) { $response->send(); } }; $funGetImg = function ($img) { $default_img = '/img/phone.png'; return !empty($img) && getimagesize($img) ? $img : $default_img; }; $data = array_merge($data, array('config' => $config, 'getRoute' => $funGetRoute, 'include' => $funDoAction, 'route' => $funCurRoute, 'getImg' => $funGetImg, 'isAjax' => self::isAjax())); ob_start(); extract(self::$_data); extract($data); include self::$_layout; $result = ob_get_clean(); return $result; }
/** * Find route * * @param Request|null $uri * @return array|null */ public function findRoute($uri = null) { $uri = empty($uri) ? $this->getRequest()->getURI() : $uri; $result_route = null; foreach ($this->getRoutes() as $name => $route_config) { $pattern = $route_config['pattern']; $pattern = str_replace('/', '\\/', $pattern); $params = array(); if (isset($route_config['params'])) { foreach ($route_config['params'] as $key => $value) { $search = "{" . $key . "}"; $pattern = str_replace($search, '(' . $value . ')', $pattern); $params[$key] = $value; } } if (preg_match('/^' . $pattern . '$/', $uri, $matches)) { $full_action = isset($route_config['action']) ? $route_config['action'] : self::DEFAULT_CONTROLLER . '#' . self::DEFAULT_ACTION; list($controller, $action) = explode('#', $full_action); $result_route = array('controller' => $controller, 'action' => $action); $result_route['name'] = $name; array_shift($matches); $params = array_combine(array_keys($params), $matches); $result_route['params'] = !empty($params) ? $params : null; } } if (DIContainer::build('config')['debug']) { error_log('>>> ROUTE > ctrl > ' . (isset($result_route['controller']) ? $result_route['controller'] : '') . ' > action >' . (isset($result_route['action']) ? $result_route['action'] : '') . ' > params > ' . (isset($result_route['params']) ? serialize($result_route['params']) : '')); } return $result_route; }
/** * Get list of table Primary indexes * * @return mixed */ protected static function getListPriIndexes() { try { $sql = "show index from " . self::_getTableName() . " where Key_name='PRIMARY'"; $stmt = self::getDb()->prepare($sql); $stmt->execute(); return $stmt->fetchAll(\PDO::FETCH_ASSOC); } catch (\PDOException $e) { DIContainer::build('app')->renderError($e); } }