| ... | ... |
@@ -3,6 +3,7 @@ |
| 3 | 3 |
namespace elanpl\L3; |
| 4 | 4 |
|
| 5 | 5 |
class Application{
|
| 6 |
+ public $Config; // L3 Config object |
|
| 6 | 7 |
public $Request; // build from received HTTP request |
| 7 | 8 |
public $Response; // response to be send |
| 8 | 9 |
public $Router; // routing engine |
| ... | ... |
@@ -16,13 +17,16 @@ class Application{
|
| 16 | 17 |
//public $Module; //Active module |
| 17 | 18 |
//public $Action; //Active action |
| 18 | 19 |
|
| 19 |
- public function __construct(){
|
|
| 20 |
+ public function __construct($config){
|
|
| 21 |
+ //set L3 application config |
|
| 22 |
+ $this->Config = $config; |
|
| 20 | 23 |
//create request object |
| 21 |
- $this->Request = new Request(); |
|
| 24 |
+ $this->Request = $this->Config->getRequest(); |
|
| 25 |
+ //create router object |
|
| 26 |
+ $this->Router = new Router($this->Config->getRouting()); |
|
| 22 | 27 |
//create response objcet |
| 23 | 28 |
$this->Response = new Response(); |
| 24 |
- //create router object |
|
| 25 |
- $this->Router = new Router(); |
|
| 29 |
+ |
|
| 26 | 30 |
//create serialization object |
| 27 | 31 |
$this->Serialization = new Serialization(); |
| 28 | 32 |
} |
| ... | ... |
@@ -10,6 +10,7 @@ class Request{
|
| 10 | 10 |
public $AcceptLanguage; |
| 11 | 11 |
public $UserAgent; |
| 12 | 12 |
public $Headers; |
| 13 |
+ public $Body; |
|
| 13 | 14 |
public function __construct(){
|
| 14 | 15 |
if(isset($_GET['path'])) |
| 15 | 16 |
$this->Path = $_GET['path']; |
| ... | ... |
@@ -31,6 +32,9 @@ class Request{
|
| 31 | 32 |
$this->Headers[$header] = $value; |
| 32 | 33 |
} |
| 33 | 34 |
} |
| 35 |
+ if (php_sapi_name() != "cli") {
|
|
| 36 |
+ $this->Body = file_get_contents('php://input');
|
|
| 37 |
+ } |
|
| 34 | 38 |
} |
| 35 | 39 |
|
| 36 | 40 |
public function ParseAccept($accept){
|
| ... | ... |
@@ -4,71 +4,71 @@ namespace elanpl\L3; |
| 4 | 4 |
|
| 5 | 5 |
class Router{
|
| 6 | 6 |
|
| 7 |
- //protected static $_instance; // object instance (for fluent api) |
|
| 8 |
- protected static $routes; // The defined routes collection |
|
| 9 |
- protected static $parsedParameters; // Parameters parsed from Request Path |
|
| 10 |
- protected static $depth; // Number of nested nodes in Request Path |
|
| 11 |
- protected static $routeNameIndex; // An array with elements that reference to the routes ordered by a route names |
|
| 12 |
- public static $RouteInfo; // The RouteInfo objcet if the route was matched |
|
| 13 |
- |
|
| 14 |
- public function __construct() |
|
| 7 |
+ protected $routes; // The defined routes collection |
|
| 8 |
+ protected $parsedParameters; // Parameters parsed from Request Path |
|
| 9 |
+ protected $depth; // Number of nested nodes in Request Path |
|
| 10 |
+ protected $routeNameIndex; // An array with elements that reference to the routes ordered by a route names |
|
| 11 |
+ public $RouteInfo; // The RouteInfo objcet if the route was matched |
|
| 12 |
+ |
|
| 13 |
+ public function __construct($routing) |
|
| 15 | 14 |
{
|
| 16 |
- //if(!isset(self::$_instance)) self::$_instance = new self; |
|
| 17 |
- if(!isset(self::$routes)) self::$routes = array(); |
|
| 18 |
- if(!isset(self::$routeNameIndex)) self::$routeNameIndex= array(); |
|
| 15 |
+ $this->routes = array(); |
|
| 16 |
+ $this->routeNameIndex = array(); |
|
| 17 |
+ //Set the routing from configuration object |
|
| 18 |
+ $routing->set($this); |
|
| 19 | 19 |
} |
| 20 | 20 |
|
| 21 |
- public static function add($Method, $Path, $Result, $Name = ''){
|
|
| 22 |
- self::$routes[] = new RouteInfo($Method, $Path, $Result, $Name); |
|
| 23 |
- if(isset($Name)&&$Name!='') self::$routeNameIndex[$Name] = &self::$routes[count(self::$routes)-1]; |
|
| 24 |
- return new self; |
|
| 21 |
+ public function add($Method, $Path, $Result, $Name = ''){
|
|
| 22 |
+ $this->routes[] = new RouteInfo($Method, $Path, $Result, $Name); |
|
| 23 |
+ if(isset($Name)&&$Name!='') $this->routeNameIndex[$Name] = &$this->routes[count($this->routes)-1]; |
|
| 24 |
+ return $this; |
|
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 |
- public static function get($Path, $Result, $Name = ''){
|
|
| 28 |
- return self::add('GET', $Path, $Result, $Name);
|
|
| 27 |
+ public function get($Path, $Result, $Name = ''){
|
|
| 28 |
+ return $this->add('GET', $Path, $Result, $Name);
|
|
| 29 | 29 |
} |
| 30 | 30 |
|
| 31 |
- public static function post($Path, $Result, $Name = ''){
|
|
| 32 |
- return self::add('POST', $Path, $Result, $Name);
|
|
| 31 |
+ public function post($Path, $Result, $Name = ''){
|
|
| 32 |
+ return $this->add('POST', $Path, $Result, $Name);
|
|
| 33 | 33 |
} |
| 34 | 34 |
|
| 35 |
- public static function put($Path, $Result, $Name = ''){
|
|
| 36 |
- return self::add('PUT', $Path, $Result, $Name);
|
|
| 35 |
+ public function put($Path, $Result, $Name = ''){
|
|
| 36 |
+ return $this->add('PUT', $Path, $Result, $Name);
|
|
| 37 | 37 |
} |
| 38 | 38 |
|
| 39 |
- public static function patch($Path, $Result, $Name = ''){
|
|
| 40 |
- return self::add('PATCH', $Path, $Result, $Name);
|
|
| 39 |
+ public function patch($Path, $Result, $Name = ''){
|
|
| 40 |
+ return $this->add('PATCH', $Path, $Result, $Name);
|
|
| 41 | 41 |
} |
| 42 | 42 |
|
| 43 |
- public static function delete($Path, $Result, $Name = ''){
|
|
| 44 |
- return self::add('DELETE', $Path, $Result, $Name);
|
|
| 43 |
+ public function delete($Path, $Result, $Name = ''){
|
|
| 44 |
+ return $this->add('DELETE', $Path, $Result, $Name);
|
|
| 45 | 45 |
} |
| 46 | 46 |
|
| 47 |
- public static function any($Path, $Result, $Name = ''){
|
|
| 48 |
- return self::add('ANY', $Path, $Result, $Name);
|
|
| 47 |
+ public function any($Path, $Result, $Name = ''){
|
|
| 48 |
+ return $this->add('ANY', $Path, $Result, $Name);
|
|
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 |
- public static function AddBeforeAction($event_handler){
|
|
| 52 |
- self::$routes[count(self::$routes)-1]->AddBeforeAction($event_handler); |
|
| 53 |
- return new self; |
|
| 51 |
+ public function AddBeforeAction($event_handler){
|
|
| 52 |
+ $this->routes[count($this->routes)-1]->AddBeforeAction($event_handler); |
|
| 53 |
+ return $this; |
|
| 54 | 54 |
} |
| 55 | 55 |
|
| 56 |
- public static function AddAfterAction($event_handler){
|
|
| 57 |
- self::$routes[count(self::$routes)-1]->AddAfterAction($event_handler); |
|
| 58 |
- return new self; |
|
| 56 |
+ public function AddAfterAction($event_handler){
|
|
| 57 |
+ $this->routes[count($this->routes)-1]->AddAfterAction($event_handler); |
|
| 58 |
+ return $this; |
|
| 59 | 59 |
} |
| 60 | 60 |
|
| 61 |
- public static function AddAfterResult($event_handler){
|
|
| 62 |
- self::$routes[count(self::$routes)-1]->AddAfterAction($event_handler); |
|
| 63 |
- return new self; |
|
| 61 |
+ public function AddAfterResult($event_handler){
|
|
| 62 |
+ $this->routes[count($this->routes)-1]->AddAfterAction($event_handler); |
|
| 63 |
+ return $this; |
|
| 64 | 64 |
} |
| 65 | 65 |
|
| 66 |
- public static function match($Request){
|
|
| 66 |
+ public function match($Request){
|
|
| 67 | 67 |
|
| 68 | 68 |
$auri = explode('/', trim($Request->Path, "/ \t\n\r\0\x0B"));
|
| 69 | 69 |
$curi = count($auri); |
| 70 | 70 |
|
| 71 |
- foreach (self::$routes as $routeInfo) {
|
|
| 71 |
+ foreach ($this->routes as $routeInfo) {
|
|
| 72 | 72 |
|
| 73 | 73 |
$route = $routeInfo->Path; |
| 74 | 74 |
$method = $routeInfo->Method; |
| ... | ... |
@@ -95,12 +95,12 @@ class Router{
|
| 95 | 95 |
$value = intval($value); |
| 96 | 96 |
} |
| 97 | 97 |
//value store... |
| 98 |
- self::$parsedParameters[$valueKey[0]] = $value; |
|
| 98 |
+ $this->parsedParameters[$valueKey[0]] = $value; |
|
| 99 | 99 |
} |
| 100 | 100 |
} |
| 101 | 101 |
if($matchResult){ // match found
|
| 102 |
- self::$depth = $curi; |
|
| 103 |
- self::$RouteInfo = $routeInfo; |
|
| 102 |
+ $this->depth = $curi; |
|
| 103 |
+ $this->RouteInfo = $routeInfo; |
|
| 104 | 104 |
return $routeInfo->Result; |
| 105 | 105 |
} |
| 106 | 106 |
} |
| ... | ... |
@@ -109,8 +109,8 @@ class Router{
|
| 109 | 109 |
return false; |
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 |
- public static function link($name, $parameters){
|
|
| 113 |
- $route = self::$routeNameIndex[$name]; |
|
| 112 |
+ public function link($name, $parameters){
|
|
| 113 |
+ $route = $this->routeNameIndex[$name]; |
|
| 114 | 114 |
$fields = array_keys($parameters); |
| 115 | 115 |
$values = array_values($parameters); |
| 116 | 116 |
array_walk($fields, function (&$item, $key){
|
| ... | ... |
@@ -119,30 +119,8 @@ class Router{
|
| 119 | 119 |
return preg_replace($fields, $values, $route->Path); |
| 120 | 120 |
} |
| 121 | 121 |
|
| 122 |
- public function __get($name) |
|
| 123 |
- {
|
|
| 124 |
- if($name=="routes") return self::$routes; |
|
| 125 |
- if($name=="parsedParameters") return self::$parsedParameters; |
|
| 126 |
- if($name=="depth") return self::$depth; |
|
| 127 |
- if($name=="RouteInfo") return self::$RouteInfo; |
|
| 128 |
- } |
|
| 129 |
- |
|
| 130 |
- public function __call($name, $arguments) |
|
| 131 |
- {
|
|
| 132 |
- if($name == 'GetParameter'){
|
|
| 133 |
- return self::$parsedParameters[$arguments[0]]; |
|
| 134 |
- } |
|
| 135 |
- // Note: value of $name is case sensitive. |
|
| 136 |
- $allowed_methods = ['add', 'post', 'any', 'get', 'match', 'AddBeforeAction', 'AddAfterAction', 'AddAfterResult']; |
|
| 137 |
- |
|
| 138 |
- if(in_array($name, $allowed_methods)){
|
|
| 139 |
- $the_method = new \ReflectionMethod($this, $name); |
|
| 140 |
- $the_method->invokeArgs(NULL,$arguments); |
|
| 141 |
- } |
|
| 142 |
- else{
|
|
| 143 |
- throw new \Exception("Call undefined or inaccesible method ".get_class($this)."::$name");
|
|
| 144 |
- } |
|
| 145 |
- |
|
| 122 |
+ public function GetParameter($name){
|
|
| 123 |
+ return $this->parsedParameters[$name]; |
|
| 146 | 124 |
} |
| 147 | 125 |
|
| 148 | 126 |
} |
| 149 | 127 |
\ No newline at end of file |