Laravel 包:如何在自定义包中注册第三方外观?

问题描述

我正在创建一个在内部使用此 hashid package 的包。

如何在自定义包中注册第三方外观?

我尝试了三个选项,但没有一个奏效。

  1. 版本 - 作曲家

    "aliases": {
         "hashids": "Vinkla\\hashids\\Facades\\hashids"
    }
    
  2. 版本 - 在我的 ServiceProvider 中使用别名

     class MyPackageServiceProvider extends ServiceProvider
     {
        public function register()
        {
            ...
    
            $this->app->alias(\Vinkla\hashids\Facades\hashids::class,'hashids');
        } 
    
  3. 版本 - 在我的 ServiceProvider 中使用 AliasLoader

     class MyPackageServiceProvider extends ServiceProvider
     {
    
        public function register()
        {
            ...
    
            $loader = \Illuminate\Foundation\AliasLoader::getInstance();
            $loader->alias('hashids',\Vinkla\hashids\Facades\hashids::class);
         }
    

当我测试代码时,出现错误

Error: Call to undefined method Vinkla\hashids\Facades\hashids::encode()

内部

/** @test */
public something_to_test()
{
    dd(\hashids::encode(1));
}

解决方法

好的,我找到了一个解决方案,但我仍然很困惑为什么会这样。

在我的“MyPackageServiceProvider”中,我需要添加:

$this->app->register(HashidsServiceProvider::class);

为什么我需要注册提供商?我以为作曲家正在处理工作。

最后只有这个有效:

$this->app->register(HashidsServiceProvider::class);
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Hashids',\Vinkla\Hashids\Facades\Hashids::class);

其他版本效果不佳:(