【问题标题】:Integrating Multiple Xero Organizations in Laravel Drawmyattention在 Laravel 中集成多个 Xero 组织 Drawmyattention
【发布时间】:2018-08-01 01:41:30
【问题描述】:

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

因为后来它本身就是一个提供者,我认为因为我需要声明对象,所以我需要使用门面,但是啊,我不是 laravel 的专业人士。

【问题讨论】:

    标签: php laravel xero-api


    【解决方案1】:

    对于任何试图寻找解决方案的人来说,有两个问题,这里有两个解决方案

    首先我写错了提供者,如果你使用的第三方库也有提供者,你需要做以下操作

    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);
    

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多