123 строки
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			123 строки
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Created by PhpStorm.
 | |
|  * User: Игорь
 | |
|  * Date: 23.01.2017
 | |
|  * Time: 01:58
 | |
|  */
 | |
| 
 | |
| namespace PFRM;
 | |
| 
 | |
| 
 | |
| class App {
 | |
| 
 | |
|   protected $user_agent;
 | |
| 
 | |
|   protected $user_IP;
 | |
| 
 | |
|   protected $route_table;
 | |
| 
 | |
|   public $dbh;
 | |
| 
 | |
|   public $config;
 | |
| 
 | |
|   function __construct( $config ) {
 | |
|     $this->config = $config;
 | |
|     date_default_timezone_set('Europe/Moscow');
 | |
|     error_reporting(E_ALL);
 | |
|     $this->user_agent = $_SERVER['HTTP_USER_AGENT'];
 | |
|     $this->user_IP    = $_SERVER['REMOTE_ADDR'];
 | |
|     $this->setRoute( '|^/$|', 'Index', 'index' );
 | |
| 
 | |
|     $dsn = 'mysql:host=' . $this->config->db->host
 | |
|            . ';dbname=' . $this->config->db->dbname . ';charset=utf8';
 | |
| 
 | |
|     try {
 | |
|       $this->dbh = new \PDO(
 | |
|         $dsn,
 | |
|         $this->config->db->user,
 | |
|         $this->config->db->password
 | |
|       );
 | |
|     } catch (\PDOException $exception) {
 | |
|       die( 'Нет подключения к MySQL: ' . $exception->getMessage() );
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Получение useragent пользователя
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function getUserAgent() {
 | |
|     return $this->user_agent;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Получение IP пользователя
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function getUserIP() {
 | |
|     return $this->user_IP;
 | |
|   }
 | |
| 
 | |
|   public function getPostObj( $array ) {
 | |
|     $out = [];
 | |
|     foreach ( $array as $value ) {
 | |
|       if ( isset( $_POST[ $value ] ) ) {
 | |
|         $out[ $value ] = $_POST[ $value ];
 | |
|       } else {
 | |
|         $out[ $value ] = false;
 | |
|       }
 | |
|     }
 | |
|     return (object) $out;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Установка маршрута
 | |
|    *
 | |
|    * @param string $regexp регулярное выражение описывающее путь
 | |
|    * @param string $controller котроллер.
 | |
|    * @param string $action действие. по умолчанию 'index'
 | |
|    */
 | |
|   public function setRoute( $regexp, $controller, $action = 'index') {
 | |
|     $this->route_table[] = array($regexp,$controller,$action);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Редирект
 | |
|    *
 | |
|    * @param string $url адрес переброса
 | |
|    */
 | |
|   public function Redirect( $url ) {
 | |
|     header( 'Location: ' . $url );
 | |
|     exit(0);
 | |
|   }
 | |
| 
 | |
|   public function routeRun( $controller, $action = 'index', $params = [] ) {
 | |
|     $a = $this->config->controller_namespace . $controller . 'Controller';
 | |
|     $obj = new $a;
 | |
|     call_user_func_array( [ $obj, $action . 'Action' ], $params );
 | |
|     exit(0);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Запуск приложения
 | |
|    */
 | |
|   public function run(){
 | |
|     foreach ( $this->route_table as $route_array ) {
 | |
|       if ( preg_match( $route_array[0], $_SERVER['REQUEST_URI'], $matches ) ) {
 | |
|         $a = $this->config->controller_namespace . $route_array[1] . 'Controller';
 | |
|         $obj = new $a;
 | |
|         $param_arr = [];
 | |
|         foreach ( $matches as $key => $value ) {
 | |
|           if ( ! is_int( $key ) ) {
 | |
|             $param_arr[] = $value;
 | |
|           }
 | |
|         }
 | |
|         call_user_func_array( [ $obj, $route_array[2] . 'Action' ], $param_arr );
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| } |