/** * */ protected function dispatch() { if ($this->dispatcher_is_breaked) { return; } $module = $this->request->getRoute('module'); $controller = $this->request->getRoute('controller'); $controller = Core_String::toClass($module) . '_' . Core_String::toClass($controller) . 'Controller'; if (class_exists($controller, true)) { $controller_instance = new $controller(); if (method_exists($controller_instance, 'init')) { $controller_instance->init(); } if ($this->dispatcher_is_breaked) { return; } $action = $this->request->getRoute('action'); $action = Core_String::toFunction($action) . 'Action'; if (method_exists($controller_instance, $action)) { $controller_instance->{$action}(); return; } } p404('Missing: ' . $controller . (!empty($action) ? '::' . $action : null)); }
/** * @param $address * @param bool $lang * @param array $options * @return mixed|string */ public function getAddress($address, array $options = array()) { if (substr($address, 0, 7) == 'http://' || substr($address, 0, 8) == 'https://') { return $address; } if (!isset($address)) { $tmp_parts = Core_Request_Routes::getInstance()->getRoutes(); unset($tmp_parts['module']); $address = implode('/', $tmp_parts); unset($tmp_parts); } // Create query $query = array(); if (!empty($options[self::ADD_CURRENT_QUERY])) { $query = array_merge($query, $this->request->getAllQueries()); } if (strstr($address, '?')) { parse_str(preg_replace('[.*\\?]', null, $address), $query_tmp); $query = array_merge($query, $query_tmp); $address = preg_replace('[\\?.*]', null, $address); } if (isset($options[self::ADD_QUERY])) { $query = array_merge($query, $options[self::ADD_QUERY]); } // Create $address $module = isset($options[self::SET_MODULE]) ? $options[self::SET_MODULE] : $this->request->getRoute('module'); if ($module == 'default') { $module = null; } $address = '/' . $module . '/' . $address; $address_parts = array(); foreach (explode('/', $address) as $part) { if ($part) { if (substr($part, 0, 1) == ':') { $part = $this->request->getRoute(substr($part, 1)); } // skip displaying index files if ($part == 'index') { continue; } $address_parts[] = $part; } } $address = cfg()->game_address . '/' . implode('/', $address_parts); // Prepare to return if ($query) { $address .= '&' . http_build_query($query); } if (!empty($options[self::STRICT_LINK])) { $address = str_replace('&', '&', $address); } return $address; }