[英]Laravel Package development: Facade alias not found
I try to create an alias for a facade in a Laravel 7 package.我尝试为 Laravel 7 package 中的外观创建别名。
On testing I get the message:在测试时,我收到消息:
Error: Class 'MemberRequest' not found
错误:未找到 Class 'MemberRequest'
Test:测试:
/** @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()]);
}
I did the following steps:我做了以下步骤:
Create a Facade:创建立面:
namespace martijn\UMS\Repositories\Facades;
use Illuminate\Support\Facades\Facade;
class MemberRequestRepositoryFacade extends Facade
{
public static function getFacadeAccessor()
{
return 'MemberRequest';
}
}
Register in serviceProvider:在 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();
});
}
}
Add it to a config file:将其添加到配置文件中:
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,
]
];
Add it to composer.json:将其添加到 composer.json:
"aliases": {
"MemberRequest": "martijn\\UMS\\Repositories\\Facades\\MemberRequestRepositoryFacade"
}
In your ServiceProvider
, try like this:在您的
ServiceProvider
中,尝试如下:
$this->app->singleton('MemberRequest', function () {
return new MemberRequestRepository;
});
I found out that it is done in the boot loader of the service provider like this:我发现它是在服务提供商的引导加载程序中完成的,如下所示:
https://laracasts.com/discuss/channels/laravel/dynamic-class-aliases-in-package https://laracasts.com/discuss/channels/laravel/dynamic-class-aliases-in-package
In my example it was:在我的例子中是:
$loader = AliasLoader::getInstance();
$loader->alias('MemberRequest', \martijn\UMS\Repositories\Facades\MemberRequestRepositoryFacade::class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.