Laravel包读取包配置文件而未发布配置文件

时间:2018-04-05 13:52:55

标签: php laravel config packages

我创建了一个Laravel包,将其上传到packagist并设法使用composer require安装它。

我现在遇到了一个问题,我不知道如何修复它并进行搜索无济于事。

我有一个配置文件,它将默认配置文件发布到config目录。我已对已发布的文件进行了更改,现在我希望我的包使用此配置文件,但它使用的是包中的配置文件,而不是新更新的已发布文件。 这是供应商src文件夹中的服务提供商

namespace Clystnet\Vtiger;

use Illuminate\Support\ServiceProvider;

class VtigerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->publishes([
            __DIR__ . '/Config/config.php' => config_path('vtiger.php'),
        ], 'vtiger');

        // use the vendor configuration file as fallback
        $this->mergeConfigFrom(
            __DIR__ . '/Config/config.php', 'vtiger'
        );
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('clystnet-vtiger', function () {
            return new Vtiger();
        });

        config([
            'config/vtiger.php',
        ]);
    }
}

这是我的主要包类

<?php 
namespace Clystnet\Vtiger;

use Storage;
use Illuminate\Support\Facades\Config;

class Vtiger
{
    protected $url;
    protected $username;
    protected $accesskey;

    public function __construct() {
        // set the API url and username
        $this->url = Config::get('vtiger.url');
        $this->username = Config::get('vtiger.username');
        $this->accesskey = Config::get('vtiger.accesskey');
    }
   ...

在我的课堂上,我正在做一个var_dump($this->url)并且它没有读取正确的配置文件。

如何将其设置为使用正确的?

更新

这是我的自定义配置文件和包正在阅读的文件

return [
    'url' => 'path/to/vtiger/webservice',
    'username' => '',
    'accesskey' => '',
];

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题(联系人:是我的包裹)

  

VIMP :指定 package_name.php 作为您的配置文件名(例如: contact.php

步骤1:首先,将“ mergeConfigFrom()”方法移至“ register()”方法

public function register()
{
    $this->mergeConfigFrom(
        __DIR__.'/config/contact.php','contact'
    );
}

第2步:从config文件夹中删除已发布的配置文件

第3步:使用vendor:publish重新发布

php artisan vendor:publish

第4步:清除缓存

php artisan cache:clear

php artisan config:clear

第5步:现在您可以访问配置值

$value = config('contact.defaults.send_email_to');

步骤6:我的配置文件是

<?php
    return [
        "default"=>[
            "send_email_to" => "mj@abc.com"
        ]
    ];

答案 1 :(得分:1)

正如docs所说,你应该把它放在register()方法上,如:

public function register()
{

  // use the vendor configuration file as fallback
  $this->mergeConfigFrom(
      __DIR__ . '/Config/config.php', 'vtiger'
  );

  ...

}

这应解决问题。

BTW你需要关注多维数组,因为文档说:

  

此方法仅合并配置数组的第一级。如果   您的用户部分定义了一个多维配置数组,   缺少的选项将不会合并。