我一直在使用drawmyattention将我的laravel代码与xero集成,我们从客户数据库中获取数据,并将其添加到我们的CRM中。最近,我们得到了第二个客户,他也想与Xero系统集成,我面临的问题是更改客户(组织(,我需要更改配置文件中的以下内容
消费者密钥消费者秘密和RSA加密
但是,当我在config/exero/config.php文件中动态更改这些值时,由于drawmyattention供应商提供程序已经加载,他们不会得到新的值,而是使用配置文件中的旧值。
我使用
config('xero.config.oauth', new array(values))
我可以记录并看到值发生了变化,但当我进行连接调用时,它会从客户端1获取数据,通过进一步的日志记录,我知道新的配置值不会向以前加载的提供程序编程。
在之后,我尝试创建自己的延迟服务提供商
https://laravel.com/docs/5.2/providers
运气不佳。
由于这个原因,在其他一切正常的情况下,无法在运行时切换xero组织。
链接中的答案也谈到了同样的问题,但仍然无法解决Laravel动态配置设置
当我创建自己的时
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('DrawMyAttentionXeroLaravelFacadesXeroPrivate', function()
{
return new XeroPrivate();
});
}
public function provides()
{
return ['DrawMyAttentionXeroLaravelFacadesXeroPrivate'];
}
}
我得到一个错误,XeroPrivate类不存在。。
我也混淆了使用'DrawMyAttention\XeroLaravel\Facades\XeroPrivate'或'DrawMyAttention\XeroLaravel\Providers\XeroServiceProvider'
因为later本身就是一个提供者,我认为由于我需要声明对象,我需要使用facade,但啊,我不支持laravel。
对于任何试图寻找解决方案的人来说,都有两个问题,以下是针对这两个问题的解决方案
首先,我写错了提供者,如果你使用的是第三方库,它也有提供者,你需要按照
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(
'DrawMyAttentionXeroLaravelProvidersXeroServiceProvider'
);
$loader = IlluminateFoundationAliasLoader::getInstance();
$loader->alias('XeroPrivate', 'DrawMyAttentionXeroLaravelFacadesXeroPrivate');
}
public function provides()
{
return ['DrawMyAttentionXeroLaravelFacadesXeroPrivate'];
}
}
其次,为了改变值,我实际上修改了Xero private类对象内部的变量。。使用reflectionclass功能,在我的情况下,这实际上消除了编写提供者的需要,但我正在编写这两件事,这样,如果有人需要任何解决方案,他们都可以使用它。
$config = $reflectionClass->getProperty('config');
$config->setAccessible(true);
$config->setValue( $objects , $this->_config_defaults);