我正在为我的应用程序构建一个包,用户可以在那里发布和修改一些config文件(就像每个laravel包一样)。
我最近注意到,只在用户发布配置文件时才加载配置文件。
这是我在GitHub:Laravel客户端上的包回购
这是我的服务提供商
class AdobeConnectServiceProvider extends ServiceProvider implements DeferrableProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->mergeConfigFrom(__DIR__ . "/config/adobeConnect.php", 'adobeConnect');
$this->bindFacades();
}
/**
* Bind Facades
*
* @return void
*/
private function bindFacades()
{
$config = $this->getAdobeConfig();
$entities = $config["entities"];
$this->app->singleton(Client::class, function () {
return $this->processClient();
});
$this->app->bind('sco', function () use ($entities) {
return new $entities["sco"]();
});
$this->app->bind('sco-record', function () use ($entities) {
return new $entities["sco-record"]();
});
$this->app->bind('principal', function () use ($entities) {
return new $entities["principal"]();
});
$this->app->bind('permission', function () use ($entities) {
return new $entities["permission"]();
});
$this->app->bind('common-info', function () use ($entities) {
return new $entities["common-info"]();
});
$this->app->singleton('adobe-connect', function () {
return App::make(Client::class);
});
}
/**
* get Adobe Connect Client Config
*
* @return array|null
*/
private function getAdobeConfig()
{
return $this->app["config"]->get("adobeConnect");
}
/**
* login adobe client in case of there is no session configured
*
* @return Client
*/
private function processClient()
{
$config = $this->getAdobeConfig();
$connection = new Connection($config["host"], $config["connection"]);
$client = new Client($connection);
if ($config["session-cache"]["enabled"]) {
$this->loginClient($client);
}
return $client;
}
/**
* Login Client Based information that introduced in environment/config file
*
* @param Client $client
*
* @return void
*/
private function loginClient(Client $client)
{
$config = $this->getAdobeConfig();
$driver = $this->getCacheDriver();
$session = Cache::store($driver)->remember(
$config['session-cache']['key'],
$config['session-cache']['timeout'],
function () use ($config, $client) {
$client->login($config["user-name"], $config["password"]);
return $client->getSession();
});
$client->setSession($session);
}
/**
* get Preferred cache driver
*
* @return string|null
*/
private function getCacheDriver()
{
$config = $this->app["config"]->get("adobeConnect");
if ($driver = $config["session-cache"]["driver"]) {
return $driver;
}
return $this->app["config"]->get("cache.default");
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
$this->publishes([
__DIR__ . '/config/adobeConnect.php' => config_path('adobeConnect.php'),
], 'adobe-connect');
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [
SCORecord::class,
Principal::class,
Permission::class,
CommonInfo::class,
Client::class,
SCO::class,
'adobe-connect'
];
}
}我读过laravel's的官方套餐,什么也没找到!
发布于 2019-09-12 07:53:21
我发现了问题所在。这个问题在延迟加载提供程序下很难解决:它应该返回facade绑定名称,而不是类名。
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [
Client::class,
'sco-record',
'principal',
'permission',
'common-info',
'sco',
'adobe-connect'
];
}https://stackoverflow.com/questions/57901610
复制相似问题