在Laravel Drawmyattention中集成多个Xero组织



我一直在使用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);

相关内容

  • 没有找到相关文章

最新更新