12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- /**
- * FecShop file.
- *
- * @link http://www.fecshop.com/
- * @copyright Copyright (c) 2016 FecShop Software LLC
- * @license http://www.fecshop.com/license/
- */
- $dir = __DIR__ . '/../../../yiisoft/yii2';
- require $dir.'/BaseYii.php';
- /**
- * @author Terry Zhao <2358269014@qq.com>
- * @since 1.0
- */
- class Yii extends \yii\BaseYii
- {
- /**
- * @var \fecshop\services\Application $service
- */
- public static $service;
- /**
- * rewriteMap , like:
- * [
- * '\fecshop\models\mongodb\Category' => '\appadmin\models\mongodb\Category'
- * ]
- */
- public static $rewriteMap;
- /**
- * @param $absoluteClassName | String , like: '\fecshop\app\appfront\modules\Cms\block\home\Index'
- * @param $arguments | Array ,数组,里面的每一个子项就是用于实例化的一个参数,多少个子项,就代表有多个参数,用于对象的实例化。
- * 通过$rewriteMap,查找是否存在重写,如果存在,则得到重写的className
- * 然后返回 类名 和 对象
- */
- public static function mapGet($absoluteClassName, $arguments = []){
- $absoluteClassName = self::mapGetName($absoluteClassName);
- if (!empty($arguments) && is_array($arguments)) {
- $class = new ReflectionClass($absoluteClassName);
- $absoluteOb = $class->newInstanceArgs($arguments);
- /**
- * 下面的 ...,是php的语法糖(只能php5.6以上,放弃),也就是把$paramArray数组里面的各个子项参数,
- * 作为对象生成的参数,详细可以参看:https://segmentfault.com/q/1010000006789348
- */
- //$absoluteOb = new $absoluteClassName(...$arguments);
- } else {
- $absoluteOb = new $absoluteClassName;
- }
-
- return [$absoluteClassName, $absoluteOb];
- }
- /**
- * @param $absoluteClassName | String , like: '\fecshop\app\appfront\modules\Cms\block\home\Index'
- * 通过$rewriteMap,查找是否存在重写,如果存在,则返回重写的className
- */
- public static function mapGetName($absoluteClassName){
- if(isset(self::$rewriteMap[$absoluteClassName]) && self::$rewriteMap[$absoluteClassName]){
- $absoluteClassName = self::$rewriteMap[$absoluteClassName];
- }
- return $absoluteClassName;
- }
- /**
- * @param $className | String , block等className,前面没有`\`, like: 'fecshop\app\appfront\modules\Catalog\block\product\CustomOption'
- * 通过$rewriteMap,查找是否存在重写,如果存在,则返回重写的className
- */
- public static function mapGetClassName($className){
- $absoluteClassName = '\\'.$className;
- if(isset(self::$rewriteMap[$absoluteClassName]) && self::$rewriteMap[$absoluteClassName]){
- $absoluteClassName = self::$rewriteMap[$absoluteClassName];
- return substr($absoluteClassName,1);
- }
- return $className;
- }
- }
- spl_autoload_register(['Yii', 'autoload'], true, true);
- Yii::$classMap = require $dir.'/classes.php';
- Yii::$container = new yii\di\Container();
|