Guest User

Untitled

a guest
Jul 21st, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.98 KB | None | 0 0
  1. <?php
  2.     require_once( 'Config.php' );
  3.     require_once( 'Controllers.php' );
  4.     require_once( 'Database.php' );
  5.     require_once( 'Linker.php' );
  6.  
  7.     class Zyphr{
  8.         private $oDb = null;
  9.         private $oLastController = null;
  10.         static $oApp = null;
  11.  
  12.         static $szControllerName = '';
  13.         static $szMethodName ='';
  14.  
  15.         public static function Load(){
  16.             if( Zyphr::$oApp == null ){
  17.                 Zyphr::$oApp = new Zyphr();
  18.             }
  19.  
  20.             Zyphr::$oApp->StartApplication();
  21.         }
  22.  
  23.         private function GenException( $szException ){
  24.             throw new Excepton( $szException );
  25.         }
  26.  
  27.         private function ControllerClassName( $szController ){
  28.             return ucfirst( strtolower( $szController ) )."Controller";
  29.         }
  30.  
  31.         private function LoadController( $szController, $szMethod, $pParams ){
  32.             $szClassName = $this->ControllerClassName( $szController );
  33.  
  34.             $this->oLastController = new $szClassName;
  35.  
  36.             /******
  37.             Checar número de parâmetros
  38.             ****/
  39.  
  40.             Zyphr::$szControllerName = $szController;
  41.             Zyphr::$szMethodName = $szMethod;
  42.  
  43.             call_user_func( array( $this->oLastController, $szMethod ), $pParams );
  44.         }
  45.  
  46.         private function ControllerExists( $szController ){
  47.             if( !class_exists( $this->ControllerClassName( $szController ) ) ){
  48.                 return false;
  49.             }
  50.  
  51.             return true;
  52.         }
  53.  
  54.         private function ControllerActionExists( $szController, $szAction ){
  55.             try{
  56.                 $pReflection = new ReflectionMethod( $this->ControllerClassName( $szController ), $szAction );
  57.  
  58.                 return true;
  59.             }catch( Exception $e ){
  60.                 return false;
  61.             }
  62.         }
  63.  
  64.         private function ParseArgs(){
  65.             $config = $GLOBALS['config'];
  66.  
  67.             $szReference = isset( $_GET['Reference'] ) ? $_GET['Reference'] : '';
  68.             $pActions = explode( '/', $szReference );
  69.  
  70.             if( in_array( '', $pActions ) ){
  71.                 unset( $pActions[array_search( '', $pActions )] );
  72.             }
  73.  
  74.             $nParamsLen = sizeof( $pActions );
  75.  
  76.             if( $nParamsLen == 0 ){
  77.                 $szController = $config['default_controller'];
  78.                 $szMethod = $config['default_method'];
  79.                 $pParams = array();
  80.  
  81.                 if( !$this->ControllerExists( $szController ) ){
  82.                     throw new Exception( "Não foi possível encontrar a classe responsável pelo controller <b>{$szController}</b>.");
  83.                 }
  84.  
  85.                 if( !$this->ControllerActionExists( $szController, $szMethod ) ){
  86.                     throw new Exception( "Não foi possível encontrar a action <b>{$szMethod}</b> no controller <b>{$szController}</b>." );
  87.                 }
  88.             }elseif( $nParamsLen == 1 ){
  89.                 $szController = $pActions[0];
  90.  
  91.                 if( !$this->ControllerExists( $szController ) ){
  92.                     $szMethod = $szController;
  93.                     $szController = $config['default_controller'];
  94.  
  95.                     if( !$this->ControllerActionExists( $szController, $szMethod ) ){
  96.                         throw new Exception( "Não foi possível encontrar o controlador <b>{$szMethod}</b>.");
  97.                     }
  98.                 }else{
  99.                     $szMethod = $config['default_method'];
  100.  
  101.                     if( !$this->ControllerActionExists( $szController, $config['default_method'] ) ){
  102.                         throw new Exception( "Não foi possível encontrar a ação <b>{$szMethod}</b> no controlador <b>{$szController}</b>.");
  103.                     }
  104.                 }
  105.  
  106.                 $pParams = array();
  107.             }elseif( $nParamsLen == 2 ){
  108.                 $szController = $pActions[0];
  109.                 $szMethod = $pActions[1];
  110.                 $pParams = array();
  111.  
  112.             }elseif( $nParamsLen > 2 ){
  113.                 $szController = $pActions[0];
  114.                 $szMethod = $pActions[1];
  115.                 $pParams = array_slice( $pActions, 2 );
  116.                
  117.             }
  118.  
  119.             $this->LoadController( $szController, $szMethod, $pParams );
  120.         }
  121.  
  122.         private function LoadControllers(){
  123.             if( $pDir = opendir( 'Application/Controller' ) ){
  124.                 while( ( $pFile = readdir( $pDir ) ) !== false ){
  125.                     if( $pFile != "." && $pFile != ".." ){
  126.                         require_once( "Application/Controller/{$pFile}" );
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.  
  132.         private function StartApplication(){
  133.             try{
  134.                 if( $this->oDb == null ){
  135.                     $this->oDb = new Database();
  136.                 }
  137.  
  138.                 $this->oDb->Open();
  139.  
  140.                 $this->LoadControllers();
  141.                 $this->ParseArgs();
  142.             }catch( Exception $e ){
  143.                 $this->LoadController( 'error', 'index', $e->getMessage() );
  144.             }
  145.         }
  146.     }
  147. ?>
Add Comment
Please, Sign In to add comment