コード例 #1
0
ファイル: Response.php プロジェクト: benms/eShop
 public function redirect($url)
 {
     $request = DIContainer::build('request');
     header('Referer: ' . $request->getURI());
     header('Location: ' . $url, false, 301);
     die;
 }
コード例 #2
0
ファイル: Application.php プロジェクト: benms/eShop
 /**
  * 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;
 }
コード例 #3
0
ファイル: Controller.php プロジェクト: benms/eShop
 /**
  * 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;
 }
コード例 #4
0
ファイル: Router.php プロジェクト: benms/eShop
 /**
  * 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;
 }
コード例 #5
0
ファイル: Model.php プロジェクト: benms/eShop
 /**
  * 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);
     }
 }