Beispiel #1
0
 /**
  * Generate url
  *
  * @param array $options
  *		controller - array or string controller parts
  *		action - string action
  *		id - mixed id
  *		virtual - boolean flag
  *		tinyurl - whether to generate tinuurl
  *		full - boolean flag
  *		get_params - array of GET parameters
  * @return string
  */
 public static function get($options = [])
 {
     // we need to fix controller, action and id
     $controller = $options['controller'] ?? '';
     if (is_array($controller)) {
         $controller = implode('/', $controller);
     }
     $controller = rtrim($controller, '/');
     $action = $options['action'] ?? null;
     $id = $options['id'] ?? null;
     // processing virtual
     if (!empty($options['virtual'])) {
         $virtual_object = new object_virtual_controllers();
         $virtual_data = $virtual_object->get();
         foreach ($virtual_data as $k => $v) {
             if ($v['no_virtual_controller_path'] == $controller) {
                 $controller = '/__' . $v['no_virtual_controller_code'];
                 break;
             }
         }
     }
     // assembling
     $result = '';
     $host = '';
     if (!empty($options['full'])) {
         $host = rtrim(request::host(), '/');
     }
     $result .= $host;
     $result .= $controller;
     if (!empty($id) && empty($action)) {
         $action = 'index';
     }
     if (!empty($action)) {
         $result .= '/_' . $action;
     }
     if (!empty($id)) {
         $result .= '/' . $id;
     }
     // if we have GET parameters
     if (!empty($options['get_params'])) {
         $result .= '?' . http_build_query2($options['get_params']);
     }
     // if we need to generate tinyurl
     if (!empty($options['tinyurl'])) {
         $tinyurl_result = url_tinyurl::set($result);
         if ($tinyurl_result['success']) {
             $result = $host . '/__tinyurl/_i/' . $tinyurl_result['data']['hash'];
         }
     }
     return $result;
 }
 /**
  * Parse request string into readable array
  *
  * @param string $url
  * @return array
  */
 public static function mvc($url = '')
 {
     $result = array('controller' => '', 'controller_extension' => '', 'action' => '', 'id' => 0, 'controllers' => []);
     // remove an extra backslashes from left side
     $request_uri = explode('?', trim($url, '/'));
     $request_uri = $request_uri[0];
     // determine action and controller
     $parts = explode('/', $request_uri);
     // virtual controller
     if (substr($parts[0], 0, 2) == '__') {
         $virtual_object = new object_virtual_controllers();
         $virtual_data = $virtual_object->get();
         $key = substr($parts[0], 2);
         if (isset($virtual_data[$key])) {
             $temp = $parts;
             unset($temp[0]);
             $parts = explode('/', trim($virtual_data[$key]['no_virtual_controller_path'], '/'));
             foreach ($temp as $v) {
                 $parts[] = $v;
             }
         }
     }
     $flag_action_found = false;
     foreach ($parts as $v) {
         if ($v . '' == '') {
             continue;
         }
         if (isset($v[0]) && $v[0] == '_' && !$flag_action_found) {
             $flag_action_found = true;
             $result['action'] = substr($v, 1);
             continue;
         }
         if (!$flag_action_found) {
             $result['controllers'][] = $v;
         }
         if ($flag_action_found) {
             $result['id'] = $v;
             break;
         }
     }
     // set default values for action and controller
     if (empty($result['controllers'])) {
         $result['controllers'][] = 'index';
     } else {
         // processing controller extension
         end($result['controllers']);
         $key = key($result['controllers']);
         $last = $result['controllers'][$key];
         if (strpos($last, '.')) {
             $temp = explode('.', $last);
             $result['controllers'][$key] = $temp[0];
             unset($temp[0]);
             $result['controller_extension'] = implode('.', $temp);
         }
     }
     $result['controller'] = '/' . implode('/', $result['controllers']);
     $result['controller'] = str_replace('_', '/', $result['controller']);
     if (empty($result['action'])) {
         $result['action'] = 'index';
     }
     // full string
     $result['full'] = $result['controller'] . '/_' . $result['action'];
     return $result;
 }