【问题标题】:Laravel Package development: Facade alias not foundLaravel 包开发:未找到外观别名
【发布时间】:2020-08-13 21:57:00
【问题描述】:

我尝试为 Laravel 7 包中的外观创建别名。

在测试时我收到消息:

错误:找不到类“MemberRequest”

测试:

    /** @test */
    public function a_member_request_can_be_created()
    {
        $this->assertDatabaseMissing('member_requests', ['created_at' => Date::now()]);
        \MemberRequest::create(new CreateMemberRequestRequest(['email_address' => $this->email_address]));
        $this->assertDatabaseHas('member_requests', ['created_at' => Date::now()]);
    }

我做了以下步骤:

  • 创建一个外观(从 Laravel Illuminate 扩展外观类
  • 在服务商中注册
  • 在配置文件中添加别名
  • 将别名添加到 composer.json 文件中

创建立面:

namespace martijn\UMS\Repositories\Facades;

use Illuminate\Support\Facades\Facade;

class MemberRequestRepositoryFacade extends Facade
{
    public static function getFacadeAccessor()
    {
        return 'MemberRequest';
    }
}

在 serviceProvider 中注册:

namespace martijn\UMS\Providers;


use Illuminate\Support\ServiceProvider;
use martijn\UMS\Repositories\MemberRequestRepository;

class UMSBaseServiceProvider extends ServiceProvider
{
public function register()
    {
        $this->registerFacades();
    }

    private function registerFacades()
    {
        // Facades
        $this->app->singleton('MemberRequest', function () {
            return new MemberRequestRepository();
        });
    }
}

将其添加到配置文件中:

return [


    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => [
        'MemberRequest' => \martijn\UMS\Repositories\Facades\MemberRequestRepositoryFacade::class,
    ]
];

将其添加到 composer.json:

      "aliases": {
        "MemberRequest": "martijn\\UMS\\Repositories\\Facades\\MemberRequestRepositoryFacade"
      }

【问题讨论】:

    标签: laravel-7 php-7.4 package-development


    【解决方案1】:

    我发现它是在服务提供者的引导加载程序中完成的,如下所示:

    https://laracasts.com/discuss/channels/laravel/dynamic-class-aliases-in-package

    在我的例子中是:

    $loader = AliasLoader::getInstance();
    $loader->alias('MemberRequest', \martijn\UMS\Repositories\Facades\MemberRequestRepositoryFacade::class);
    

    【讨论】:

      【解决方案2】:

      在您的ServiceProvider 中,尝试如下:

      $this->app->singleton('MemberRequest', function () {
         return new MemberRequestRepository;
      });
      

      【讨论】:

      • 同样的错误:> 错误:找不到类'MemberRequest'
      猜你喜欢
      • 2019-06-02
      • 2021-05-01
      • 2015-01-08
      • 1970-01-01
      • 2018-03-08
      • 2015-05-30
      • 1970-01-01
      • 2021-10-09
      • 2018-04-24
      相关资源
      最近更新 更多