在一个 PHP Composer 项目中存储配置的最佳方式是什么?

3

当我们不使用框架时

  1. 在一个composer项目中,最佳的配置存储方式是什么,我们如何从控制器或模型文件中加载它们?最好将配置存储在src文件夹之外。

  2. 为什么没有人使用类常量来存储配置

例如:App/Config/AppConfig::TIMEZONE;

- composer.json

"autoload": 
{
    "psr-4": 
    { 
        "App\\": "src/app/" 
    }
}

- /src/app/Configs/AppConfig.php

namespace App\Configs;

class AppConfig {
    const TIMEZONE = 'EST';
}

- src/app/Controllers/HelloWorld.php

namespace App\Controllers;
use App\Configs\AppConfig;

class HelloWorld
{
    $timezone = AppConfig::TIMEZONE;
}

谢谢

2个回答

0
在现代社会,事物变得越来越现代化。最佳的配置方法是将其分别保存在目录中。现在是时候讨论如何调用配置值了;创建一个帮助函数,它将为您收集数据并高效地按照您的要求返回。

这就是为什么我在问题中加入了“最好我们可以将配置文件存储在src文件夹之外”的原因。而且我正在考虑一个自动加载的功能,而不是调用帮助函数。 - Dumindu Madunuwan
我认为如果您将所有文件添加到autoload中而不是处理所有配置的helper文件,这并不是一个好主意,即使对于未来也是如此。 - Farhan Wazir

0

我使用this PHPConfig Package来完成那种事情。

这种方法让你将所有的配置项存储在代码之外的一个独立位置,并且可以轻松地在应用程序的任何地方访问任何配置值。

目录结构

- app
    - app.php
    - config
        - config_file_one.php
        - config_file_two.php
- public
    - index.php

config_file_one.php

<?php
use TomWright\PHPConfig\Config;

$config = Config::getInstance();

$config->setItem('mysite.name', 'My Site');

config_file_two.php

<?php
use TomWright\PHPConfig\Config;

$config = Config::getInstance();

$config->setItem('mysite.url', 'https://www.example.com');

app.php

<?php
use TomWright\PHPConfig\Config;

class App {

    public function __construct()
    {
        $this->loadConfigFiles();
    }

    private function loadConfigFiles()
    {
        require_once '/path/to/app/config/config_file_one.php';
        require_once '/path/to/app/config/config_file_two.php';
    }

    public function run()
    {
        $config = Config::getInstance();

        var_dump($config->getItem('mysite.name')); // My Site
        var_dump($config->getItem('mysite.url')); // https://www.example.com
        var_dump($config->getItem('mysite')); // stdClass { name => 'My Site', url => 'https://www.example.com' }
    }

}

index.php

<?php
require_once './vendor/autoload.php';
$app = new App();
$app->run();

你可以进一步操作,自动包括配置目录下的所有php文件。

你也可以根据环境变量和系统设置(如开发和生产环境)定义不同的配置项。


与其硬编码配置文件并在引导时加载它们,我更喜欢有一些机制仅在必要时自动加载它们。 - Dumindu Madunuwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接