在PHP作曲家项目中存储配置的最佳方法?

时间:2017-01-20 10:17:24

标签: php composer-php autoload no-framework

当我们不使用框架时,

  1. 在作曲家项目中存储配置的最佳方式是什么?我们如何从控制器或模型文件加载它们?我希望我们可以在src文件夹之外存储配置。

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

  3. 离。应用/配置/的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 :(得分:0)

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

答案 1 :(得分: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();

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

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