Parse.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace Qii\Route;
  3. /**
  4. * 路由规则类
  5. *
  6. * @author Jinhui Zhu<jinhui.zhu@live.cn>2015-10-24 23:11
  7. */
  8. class Parse
  9. {
  10. const VERSION = 1.3;
  11. /**
  12. * 路由转发, 转发对应的规则中xx不能为*
  13. *
  14. * @param String $controller
  15. * @param String $action
  16. * @param Array $router
  17. * @return Array ($controller, $action);
  18. *
  19. * *:* => *:yyy 所有controller和action都转发到 *->yyy
  20. * *:* => yy:* 所有转发到xxx->*, 这里的*,前边对应的是什么,后边就对应转发到什么,比如: *:xxx => yy:yyy
  21. * xx:* => yy:* xx中对应的方法转发到yy对应的方法
  22. * xx:* => yy:yyy xxx Controller转发到 yy->yyy
  23. * *:xxx => yy:yyy 所有Controller转发到 yy->yyy
  24. */
  25. public static function get($controller, $action = '', $thirdParam = '')
  26. {
  27. if ($controller == 'Qii') {
  28. return array('controller' => $controller, 'action' => $action);
  29. }
  30. //如果第一列的是*号则所有的controller都执行对应的x:
  31. $router =\Qii\Config\Register::getAppConfigure(\Qii\Config\Consts::APP_SITE_ROUTER);
  32. $rewriteRule = \Qii\Config\Register::getAppConfigure(\Qii\Config\Register::get(\Qii\Config\Consts::APP_INI_FILE), 'rewriteRule');
  33. if (!$rewriteRule) $rewriteRule = 'Normal';
  34. \Qii\Autoloader\Import::requires(Qii_DIR . DS . 'Route' . DS . 'Parse' .DS. $rewriteRule . '.php');
  35. $className = '\Qii\Route\Parse\\' . $rewriteRule;
  36. if (!class_exists($className, false)) {
  37. throw new \Qii\Exceptions\ClassNotFound(\Qii::i(1103, $className), __LINE__);
  38. }
  39. $class = new $className();
  40. $class->setConfig($router);
  41. return $class->parse($controller, $action, $thirdParam);
  42. }
  43. }
  44. ;