<?php
namespace SHServ;
class Routes {
/**
* Instance of Router module
*/
protected \Fury\Modules\Router\Router $router;
/**
* Controllers folder
*/
protected String $cf;
/**
* Controllers namespace
*/
protected String $cn;
/**
* @method __construct
* @param \Fury\Modules\Router\Router $router [description]
*/
public function __construct(\Fury\Modules\Router\Router $router) {
$this -> router = $router;
$this -> cf = FCONF["controllers_folder"];
$this -> cn = "\\" . FCONF["app_name"] . "\\" . FCONF["controllers_folder"];
}
public function routes_init() {
$this -> uri_routes();
$this -> get_routes();
$this -> post_routes();
}
protected function uri_routes() {
// pages
// $this -> router -> uri("/", "{$this -> cn}\\SearchController@search_page");
// $this -> router -> uri('/not-found.html', "{$this -> cn}\\InfoPagesController@not_found_page");
// $this -> router -> uri('/uadpost/$alias', "{$this -> cn}\\UAdPostController@view_page");
// $this -> router -> uri(
// '/profile/orders/$utype/exclude-states',
// function($args) {
// return app() -> utils -> redirect(
// app() -> routes -> urlto("OrderController@orders_cur_user_page", ["utype" => $args["utype"]])
// );
// }
// );
}
protected function get_routes() {
// $this -> router -> get(
// [ "uadpost_id", "state" ],
// "{$this -> cn}\\UAdPostController@change_uadpost_state",
// "/profile/uadposts/change-state.html"
// );
}
protected function post_routes() {
$this -> router -> post(
[ "email", "password", "password_again" ],
"{$this -> cn}\\AuthController@signup",
"/auth/signup"
);
}
/**
* urlto, get url by action name [with arguments]
* @var String $action_name - Action name, like a "HelloController@world_action"
* @var Array $url_args - Assoc array with arguments (ONLY FOR REQUEST TYPE GET)
*
* @return String Url to action, ready for use
*/
public function urlto(String $action_name, Array $url_args = []) {
$routes_map = $this -> router -> get_routes_map();
$desired_action = "{$this -> cn}\\{$action_name}";
foreach($routes_map["uri"] as $url => $action) {
if($action == $desired_action) {
foreach($url_args as $arg_name => $arg_val) {
$url = str_replace("\${$arg_name}", $arg_val, $url);
}
return $url;
}
}
foreach($routes_map["post"] as $url_pattern => $action){
if($action == $desired_action) {
list($url) = explode("?", $url_pattern);
return $url;
}
}
foreach($routes_map["get"] as $url_pattern => $action){
if($action == $desired_action) {
list($url, $param_names) = explode("?", $url_pattern);
if(count($url_args)) {
$param_names = explode("&", $param_names);
$params = array_flip($param_names);
foreach($params as $key => $val) {
if(!isset($url_args[$key])) {
continue;
}
$params[$key] = $url_args[$key];
}
}else{
$params = [];
}
return $url . "?" . http_build_query($params);
}
}
}
}