【问题标题】:Best way to store configs in a php composer project?在 php composer 项目中存储配置的最佳方式?
【发布时间】:2017-06-05 07:03:42
【问题描述】:

当我们不使用框架时

  1. 在作曲家项目中存储配置的最佳方式是什么?我们如何从控制器或模型文件中加载它们?希望我们可以将配置存储在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;
}

谢谢

【问题讨论】:

    标签: php composer-php autoload no-framework


    【解决方案1】:

    在现代世界中,事情正在变得现代。配置的最佳方法是单独保存在目录中。现在是时候谈谈调用配置值了;创建帮助函数,它将为您收集数据并根据需要有效地返回。

    【讨论】:

    • 这就是我添加“希望我们可以将配置存储在 src 文件夹之外”的原因。问题。而且我正在考虑使用自动加载工具,而不是调用辅助函数。
    • 我不这么认为,如果您将所有文件添加到自动加载中而不是帮助文件中,这将处理您的所有配置,甚至在未来也是最好的。
    【解决方案2】:

    我使用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();
    

    你可以更进一步,自动包含config目录下的所有php文件。

    您还可以根据环境变量和系统设置定义不同的配置项,例如开发和生产环境。

    【讨论】:

    • 与其硬编码配置文件并在引导时将它们全部加载,我更喜欢我们有一些机制来仅在必要时自动加载它们。
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多