簡體   English   中英

Laravel 包讀取包配置文件和未發布的配置文件

[英]Laravel package reading package config file and not published config file

我創建了一個 Laravel 包,將它上傳到 packagist 並設法使用 composer require 安裝它。

我現在遇到了一個問題,我不知道如何解決它,搜索也無濟於事。

我有一個配置文件,它將默認配置文件發布到 config 目錄。 我對已發布的文件進行了更改,現在我希望我的包使用此配置文件,但它使用的是包中的配置文件,而不是新更新的發布文件。 這是我在 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->url)並且它沒有讀取正確的配置文件。

我如何設置它以使用正確的?

更新

這是我的自定義配置文件,也是包正在讀取的文件

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

我遇到了同樣的問題(聯系人:是我的包裹)

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.default.send_email_to');

第 6 步:我的配置文件是

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

正如文檔所說,您應該將其放在 register() 方法上,例如:

public function register()
{

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

  ...

}

這應該可以解決問題。

順便說一句,您需要注意多維數組,因為文檔說:

此方法僅合並配置數組的第一級。 如果您的用戶部分定義了多維配置數組,則不會合並缺少的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM