<?php
namespace Fury\Modules\RoutesHelper;
trait RoutesHelperImplementation{
protected $generated_routes = [];
protected $router;
protected $router_meth;
protected $forbidden_to_create_for = ['ins', '__construct', 'bootstrap'];
protected function generate_route_by_method(String $classname, String $methname){
$class = new \ReflectionClass($classname);
$method = $class -> getMethod($methname);
$src_params = $method -> getParameters();
$params = array_map(function($param){
return $param -> name;
}, $src_params);
$classname = strtolower($classname);
$methname = strtolower($methname);
$classname = mb_substr($classname, 1, strlen($classname));
if($this -> router_meth == 'uri'){
$final_route = $this -> gen_route_for_uri($classname, $methname, $params);
}elseif($this -> router_meth == 'get' or $this -> router_meth == 'post'){
$final_route = $this -> gen_route_for_getpost($classname, $methname, $params);
}
return $final_route;
}
protected function gen_route_for_uri(String $classname, String $methname, Array $params){
$classname = str_replace('\\', '-', $classname);
$static_route = str_replace('_', '-', "/{$classname}/{$methname}");
$params_route = '';
foreach ($params as $param) {
$params_route .= '/' . $param . '/$' . $param;
}
$final_route = $static_route . $params_route;
return $final_route;
}
protected function gen_route_for_getpost(String $classname, String $methname, Array $params){
$vars = explode('\\', $classname);
$vars[] = $methname;
$final_route = array_merge($vars, $params);
return $final_route;
}
protected function log_generated_route_from_array(Array $route_log){
$this -> generated_routes[] = $route_log;
}
protected function log_generated_route(String $classname, String $methname, $route){
$route_log = [
'classname' => $classname,
'methname' => $methname,
'route' => $route
];
$this -> log_generated_route_from_array($route_log);
}
protected function log_generated_routes_array(Array $routes){
foreach ($routes as $route) {
$this -> log_generated_route_from_array($route);
}
}
protected function add_route($route, String $action_str){
if(!$this -> router_meth or $this -> router_meth == ''){
return false;
}
$meth = $this -> router_meth;
$this -> router -> $meth($route, $action_str);
$this -> clear_routing_meth();
}
protected function change_routing_meth(String $routing_meth){
$this -> router_meth = $routing_meth;
}
protected function clear_routing_meth(){
$this -> change_routing_meth('');
}
}