Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- ...
- /**
- * Руками не трогать!
- **/
- public static function parseURI($uri, $rule = null)
- {
- $config = APP_CONFIG;
- $parameters = [];
- $parameters['uri'] = $uri;
- $rules = $config['routing']['rules'];
- foreach ($rules as $pattern2 => $route) {
- $pattern = preg_replace("%<(\w+)\:\\\(\w\+?)>%i", "(?<$1>(\\\\$2))", $pattern2);
- $pattern = preg_replace("%<controller>%i", "(?<controller>(.*))", $pattern);
- $pattern = preg_replace("%<action>%i", "(?<action>(\w+))", $pattern);
- if (@preg_match("%^(\/)?{$pattern}$%i", $parameters['uri'], $params)) {
- $route = str_replace([
- '<controller>',
- '<action>'
- ], [
- $params['controller'],
- $params['action']
- ], $route);
- $parameters['uri'] = $route;
- $parameters['params'] = $params;
- if (isset($params['action'])) {
- $parameters['action'] = $params['action'];
- }
- break;
- }
- }
- $pars = self::parseRoute($parameters['uri']);
- return $pars;
- }
- /**
- * Руками не трогать!
- **/
- protected static function parseRoute($uri)
- {
- if (preg_match("/^\/?(?<controller>([0-9a-z\/]+))\/(?<action>(\w+))\/?$/i", $uri, $matches)) {
- $controllerPath = $matches['controller'];
- $file = explode('/', $controllerPath);
- $controllerClass = 'app\\controllers\\';
- for ($c = 0; $c < count($file); $c++) {
- if ($c == (count($file) - 1)) {
- $controllerClass .= ucfirst(strtolower($file[$c])) . 'Controller';
- } else {
- $controllerClass .= strtolower($file[$c]) . '\\';
- }
- }
- $action = 'action' . ucfirst(strtolower($matches['action']));
- $params = [];
- if (class_exists($controllerClass) AND in_array($action, get_class_methods($controllerClass))) {
- $params['controller'] = $controllerClass;
- $params['action'] = $action;
- } else {
- $config = APP_CONFIG['routing']['errors']['error404'];
- $params['controller'] = $config['controller'];
- $params['action'] = $config['action'];
- }
- $res = new self($params);
- return $res;
- }
- $config = APP_CONFIG['routing']['errors']['error404'];
- return new self([
- 'controller' => $config['controller'],
- 'action' => $config['action']
- ]);
- }
- public function getRoute()
- {
- return [
- 'controller' => $this->controller,
- 'action' => $this->action
- ];
- }
- ...
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement