【问题标题】:Laravel package reading package config file and not published config fileLaravel 包读取包配置文件而不是发布的配置文件
【发布时间】:2018-09-15 09:07:10
【问题描述】:

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

我现在遇到了一个问题,我不知道如何解决它,搜索也没有帮助。

我有一个配置文件,它将默认配置文件发布到配置目录。我已经对发布的文件进行了更改,现在我希望我的包使用这个配置文件,但它使用的是包中的配置文件,而不是新更新的发布文件。 这是我在 vendor 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-&gt;url),但它没有读取正确的配置文件。

如何设置它以使用正确的?

更新

这是我的自定义配置文件,也是软件包正在读取的配置文件

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

【问题讨论】:

  • 您的自定义配置有多维数组?
  • @Troyer 我刚刚为我的配置文件添加了代码
  • 记住您需要运行vendor:publish 来发布自定义配置文件。

标签: php laravel config packages


【解决方案1】:

正如docs 所说,您应该将其放在 register() 方法中,例如:

public function register()
{

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

  ...

}

这应该可以解决问题。

顺便说一句,您需要注意多维数组,因为文档说:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    第 3 步:使用 vendor:publish 再次发布

    php artisan vendor:publish
    

    第 4 步:清除缓存

    php artisan cache:clear
    
    php artisan config:clear
    

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

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

    第 6 步:我的配置文件是

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

    【讨论】:

      猜你喜欢
      • 2015-02-22
      • 2017-10-19
      • 2013-06-12
      • 1970-01-01
      • 2021-09-30
      • 2014-11-11
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多