1

我正在创建一个在内部使用这个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));
}
4

1 回答 1

0

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

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

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

为什么我需要注册提供者?我认为作曲家正在处理这项工作。

最后只有这个有效:

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

其他版本也不好用:(

于 2021-06-14T13:33:15.173 回答