src/RouteInfo.php
4db6a72b
 <?php
 
 namespace elanpl\L3;
 
 class RouteInfo{
     // URL pattern path
     public $Path;
     // Http method (ex. GET, POST, ANY)
     public $Method;
     // The assigned structure (string, array, function...)
     public $Result;
     // The route name
     public $Name;
     // BeforeAction event handlers;
     public $BeforeAction;
     // AfterAction event handlers;
     public $AfterAction;
     // AfterResult event handlers;
     public $AfterResult;
        
     public function __construct($Method, $Path, $Result, $Name = '')
     {
         $this->Path = $Path;
         $this->Method = $Method;
         $this->Result = $Result;
         $this->Name = $Name;
         $this->BeforeAction = array();
         $this->AfterAction = array();
         $this->AfterResult = array();
     }
 
     public function AddBeforeAction($event_handler){
         if($this->EventHandlerFormatCheck($event_handler, $match)){
             $this->BeforeAction[] = $event_handler;
             return $this;
         }
         else{
             throw new \Exception("Wrong event handler format: $event_handler");
         }
     }
 
     public function AddAfterAction($event_handler){
         if($this->EventHandlerFormatCheck($event_handler, $match)){
             $this->AfterAction[] = $event_handler;
             return $this;
         }
         else{
             throw new \Exception("Wrong event handler format: $event_handler");
         }
     }
 
     public function AddAfterResult($event_handler){
         if($this->EventHandlerFormatCheck($event_handler, $match)){
             $this->AfterResult[] = $event_handler;
             return $this;
         }
         else{
             throw new \Exception("Wrong event handler format: $event_handler");
         }
     }
 
     public static function EventHandlerFormatCheck($event_handler, &$match){
         $pattern = '#^((?<class>[a-z0-9\\\\]+)::)?(?<function>[a-z0-9]+)(\\((?<arguments>[a-z0-9;, ]+)?\\))?$#i';
         if(preg_match($pattern, $event_handler, $match)){
             if(isset($match['arguments'])){
                 $result = self::EventHandlerArgumentsFormatCheck($match['arguments'],$arguments_match);
                 return $result;
             }
             else{
                 return 1;
             }
         }
         else{
             return 0;
         }
     }
 
     public static function EventHandlerArgumentsFormatCheck($arguments, &$match){
         $match = explode(',', $arguments);
         return $match;
     }
 
  }