我一直在使用drawmyattention将laravel代码与xero集成在一起,我们从客户数据库中获取数据并将其添加到CRM中。 最近,我们有第二个也希望与Xero系统集成的客户端,我面临的问题是要更改客户端(组织),我需要在配置文件中更改以下内容
消费者密钥 消费者秘密 和 RSA加密
但是当我动态更改config / xero / config.php文件中的这些值时,由于drawmyattention供应商提供程序已加载,因此它们不会获得新值,而是坚持使用配置文件中的旧值。
我用过
config('xero.config.oauth', new array(values))
我可以记录日志并看到值已更改,但是当我进行连接调用时,它从客户端1获取数据,并且通过进一步的记录,我知道新的配置值不会传播到以前已加载的提供程序。
我尝试按照以下步骤创建自己的延期服务提供商
https://laravel.com/docs/5.2/providers
没有运气。
由于这种原因,卡住了,而其他一切正常,只是无法在运行时切换xero组织。
链接中的答案也谈到了相同的问题,但仍然无法解决 Laravel dynamic config settings
当我创建自己的
class XeroDefferedProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = true;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('DrawMyAttention\XeroLaravel\Facades\XeroPrivate', function()
{
return new XeroPrivate();
});
}
public function provides()
{
return ['DrawMyAttention\XeroLaravel\Facades\XeroPrivate'];
}
}
我收到XeroPrivate类不存在的错误。
我也对使用之间感到困惑 'DrawMyAttention \ XeroLaravel \ Facades \ XeroPrivate' 要么 'DrawMyAttention \ XeroLaravel \ Providers \ XeroServiceProvider'
因为后来它本身是提供者,所以我认为因为我需要声明对象,所以我需要使用facades,但是啊,我不是laravel的专家。
答案 0 :(得分:0)
对于试图找出解决方案的任何人,有两个问题,以下是两个问题的解决方案
首先我写了错误的提供程序,如果您使用的第三方库也有提供程序,则需要遵循以下步骤
class XeroDefferedProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = true;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->register(
'DrawMyAttention\XeroLaravel\Providers\XeroServiceProvider'
);
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('XeroPrivate', 'DrawMyAttention\XeroLaravel\Facades\XeroPrivate');
}
public function provides()
{
return ['DrawMyAttention\XeroLaravel\Facades\XeroPrivate'];
}
}
第二次更改值,实际上使用了反射类功能来修改Xero private ..类对象内的变量,这实际上消除了在我的情况下编写提供程序的需要,但我同时编写了这两种方法,因此,如果有人需要任何解决方案,他们可以使用它。
$config = $reflectionClass->getProperty('config');
$config->setAccessible(true);
$config->setValue( $objects , $this->_config_defaults);