Yii.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. $dir = __DIR__ . '/../../../yiisoft/yii2';
  10. require $dir.'/BaseYii.php';
  11. /**
  12. * @author Terry Zhao <2358269014@qq.com>
  13. * @since 1.0
  14. */
  15. class Yii extends \yii\BaseYii
  16. {
  17. /**
  18. * @var \fecshop\services\Application $service
  19. */
  20. public static $service;
  21. /**
  22. * rewriteMap , like:
  23. * [
  24. * '\fecshop\models\mongodb\Category' => '\appadmin\models\mongodb\Category'
  25. * ]
  26. */
  27. public static $rewriteMap;
  28. /**
  29. * @param $absoluteClassName | String , like: '\fecshop\app\appfront\modules\Cms\block\home\Index'
  30. * @param $arguments | Array ,数组,里面的每一个子项就是用于实例化的一个参数,多少个子项,就代表有多个参数,用于对象的实例化。
  31. * 通过$rewriteMap,查找是否存在重写,如果存在,则得到重写的className
  32. * 然后返回 类名 和 对象
  33. */
  34. public static function mapGet($absoluteClassName, $arguments = []){
  35. $absoluteClassName = self::mapGetName($absoluteClassName);
  36. if (!empty($arguments) && is_array($arguments)) {
  37. $class = new ReflectionClass($absoluteClassName);
  38. $absoluteOb = $class->newInstanceArgs($arguments);
  39. /**
  40. * 下面的 ...,是php的语法糖(只能php5.6以上,放弃),也就是把$paramArray数组里面的各个子项参数,
  41. * 作为对象生成的参数,详细可以参看:https://segmentfault.com/q/1010000006789348
  42. */
  43. //$absoluteOb = new $absoluteClassName(...$arguments);
  44. } else {
  45. $absoluteOb = new $absoluteClassName;
  46. }
  47. return [$absoluteClassName, $absoluteOb];
  48. }
  49. /**
  50. * @param $absoluteClassName | String , like: '\fecshop\app\appfront\modules\Cms\block\home\Index'
  51. * 通过$rewriteMap,查找是否存在重写,如果存在,则返回重写的className
  52. */
  53. public static function mapGetName($absoluteClassName){
  54. if(isset(self::$rewriteMap[$absoluteClassName]) && self::$rewriteMap[$absoluteClassName]){
  55. $absoluteClassName = self::$rewriteMap[$absoluteClassName];
  56. }
  57. return $absoluteClassName;
  58. }
  59. /**
  60. * @param $className | String , block等className,前面没有`\`, like: 'fecshop\app\appfront\modules\Catalog\block\product\CustomOption'
  61. * 通过$rewriteMap,查找是否存在重写,如果存在,则返回重写的className
  62. */
  63. public static function mapGetClassName($className){
  64. $absoluteClassName = '\\'.$className;
  65. if(isset(self::$rewriteMap[$absoluteClassName]) && self::$rewriteMap[$absoluteClassName]){
  66. $absoluteClassName = self::$rewriteMap[$absoluteClassName];
  67. return substr($absoluteClassName,1);
  68. }
  69. return $className;
  70. }
  71. }
  72. spl_autoload_register(['Yii', 'autoload'], true, true);
  73. Yii::$classMap = require $dir.'/classes.php';
  74. Yii::$container = new yii\di\Container();