Ai
1 Star 0 Fork 0

sintall.com/laravel-addons

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
AliasResolver.php 3.03 KB
一键复制 编辑 原始数据 按行查看 历史
sintall.com 提交于 2017-12-07 15:20 +08:00 . dd
<?php
namespace Sinta\Laravel\Addons;
use Illuminate\Config\Repository;
use Illuminate\Container\Container;
class AliasResolver
{
/**
* @var static
*/
protected static $instance;
/**
* @param string $apppath
* @param array $addons
* @param array $aliases
*/
public static function register($apppath, array $addons, array $aliases)
{
static::$instance = new static($apppath, $addons, $aliases);
spl_autoload_register([static::$instance, 'load'], true, false);
}
/**
*/
public static function unregister()
{
if (static::$instance) {
spl_autoload_unregister([static::$instance, 'load']);
}
}
/**
* @var array
*/
protected $addons;
/**
* @var array
*/
protected $globalClassAliases;
/**
* The constructor.
*
* @param string $apppath
* @param array $addons
* @param array $aliases
*/
public function __construct($apppath, array $addons, array $aliases)
{
$this->addons = array_merge([$this->makeAppAddon($apppath)], $addons);
$this->globalClassAliases = $aliases;
}
/**
* Make addon instance for application namespace.
*
* @param string $path
*
* @return static
*/
protected function makeAppAddon($path)
{
$config = [
'namespace' => trim($this->getAppNamespace(), '\\'),
];
return new Addon(null, 'app', $path, $config);
}
/**
* @param string $className
*
* @return bool
*/
public function load($className)
{
foreach ($this->addons as $addon) {
$namespace = $addon->phpNamespace();
if (empty($namespace)) {
continue;
}
$namespacePrefix = $namespace.'\\';
$includesGlobalAliases = $addon->config('addon.includes_global_aliases', true);
$addonAliases = $addon->config('addon.aliases', []);
if (!starts_with($className, $namespacePrefix)) {
continue;
}
$parts = explode('\\', $className);
$relativeClassName = $parts[count($parts) - 1];
if ($includesGlobalAliases) {
if (isset($this->globalClassAliases[$relativeClassName])) {
$originalClassName = $this->globalClassAliases[$relativeClassName];
class_alias($originalClassName, $className);
return true;
}
}
if ($addonAliases) {
if (isset($addonAliases[$relativeClassName])) {
$originalClassName = $addonAliases[$relativeClassName];
class_alias($originalClassName, $className);
return true;
}
}
}
return false;
}
/**
* Get the application namespace.
*
* @return string
*/
protected function getAppNamespace()
{
return Container::getInstance()->getNamespace();
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/limary_admin/laravel-extension.git
git@gitee.com:limary_admin/laravel-extension.git
limary_admin
laravel-extension
laravel-addons
master

搜索帮助