| ... | ... |
@@ -106,18 +106,54 @@ class Application{
|
| 106 | 106 |
} |
| 107 | 107 |
}*/ |
| 108 | 108 |
|
| 109 |
+ $field_pattern ='^{(?<field>[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)}$';
|
|
| 110 |
+ |
|
| 109 | 111 |
if(is_array($controllerAction)){
|
| 110 | 112 |
//$this->IncludeControler($ControllerAction['controller']); |
| 113 |
+ if(isset($controllerAction['module'])){
|
|
| 114 |
+ if(\preg_match($field_pattern, $controllerAction['module'], $match) ){
|
|
| 115 |
+ $module = $this->router->parsedParameters[$match['field']]; |
|
| 116 |
+ } |
|
| 117 |
+ else{
|
|
| 118 |
+ $module = $controllerAction['module']."\\"; |
|
| 119 |
+ } |
|
| 120 |
+ } |
|
| 121 |
+ else{
|
|
| 122 |
+ $module = ""; |
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 125 |
+ |
|
| 126 |
+ if(\preg_match($field_pattern, $controllerAction['controller'], $match) ){
|
|
| 127 |
+ $controller = $this->router->parsedParameters[$match['field']]; |
|
| 128 |
+ } |
|
| 129 |
+ else{
|
|
| 130 |
+ $controller = $controllerAction['controller']; |
|
| 131 |
+ } |
|
| 132 |
+ |
|
| 133 |
+ |
|
| 111 | 134 |
$controller_class = "\\".$this->applicationDirectory."\\" |
| 112 |
- .(isset($controllerAction['module'])?$controllerAction['module']."\\":"") |
|
| 135 |
+ .$module |
|
| 113 | 136 |
.$this->controllersDirecotry."\\" |
| 114 |
- .$controllerAction['controller']; |
|
| 137 |
+ .$controller; |
|
| 115 | 138 |
$controller_object = new $controller_class; |
| 116 |
- $controller_action = $controllerAction['action']; |
|
| 139 |
+ |
|
| 140 |
+ if(\preg_match($field_pattern, $controllerAction['action'], $match) ){
|
|
| 141 |
+ $controller_action = $this->router->parsedParameters[$match['field']]; |
|
| 142 |
+ } |
|
| 143 |
+ else{
|
|
| 144 |
+ $controller_action = $controllerAction['action']; |
|
| 145 |
+ } |
|
| 146 |
+ |
|
| 117 | 147 |
} |
| 118 | 148 |
|
| 119 | 149 |
//fire the action |
| 120 | 150 |
if(isset($controller_object) && isset($controller_action)){
|
| 151 |
+ |
|
| 152 |
+ // method not found - 404 |
|
| 153 |
+ if(!method_exists($controller_object,$controller_action)){
|
|
| 154 |
+ $this->handle404($this->request); |
|
| 155 |
+ } |
|
| 156 |
+ |
|
| 121 | 157 |
$this->module = (isset($controllerAction['module'])?$controllerAction['module']:""); |
| 122 | 158 |
$this->controller = $controllerAction['controller']; |
| 123 | 159 |
$this->action = $controller_action; |
| ... | ... |
@@ -185,6 +221,14 @@ class Application{
|
| 185 | 221 |
$this->response->send(); |
| 186 | 222 |
} |
| 187 | 223 |
|
| 224 |
+ public function handle404($request){
|
|
| 225 |
+ echo "Resource not found!<br>".PHP_EOL; |
|
| 226 |
+ echo "<pre>"; |
|
| 227 |
+ var_dump($request); |
|
| 228 |
+ echo "</pre>"; |
|
| 229 |
+ throw new \Exception("Not implemented!");
|
|
| 230 |
+ } |
|
| 231 |
+ |
|
| 188 | 232 |
public function beforeAction(){
|
| 189 | 233 |
if(!empty($this->router->routeInfo->beforeAction)){
|
| 190 | 234 |
foreach($this->router->routeInfo->beforeAction as $event_handler){
|
| ... | ... |
@@ -265,8 +309,7 @@ class Application{
|
| 265 | 309 |
} |
| 266 | 310 |
// routing path not found -> generate 404 response |
| 267 | 311 |
else{
|
| 268 |
- echo "Routing not found!<br>".PHP_EOL; |
|
| 269 |
- throw new \Exception("Not implemented!");
|
|
| 312 |
+ $this->handle404($this->request); |
|
| 270 | 313 |
} |
| 271 | 314 |
|
| 272 | 315 |
} |