在特定名称空间下定义配置值?

时间:2016-06-20 03:48:24

标签: php arrays configuration namespaces global

我正在编写一个框架,并且刚刚添加了命名空间。除了配置值之外,我在转换所有内容方面没有遇到任何问题。

我可以轻松定义常量,因此单个值不是问题......但是值数组怎么样?

以此数组为例,这是用于添加与Capsule ...

的连接的配置数组
[
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'DB_NAME',
    'username'  => 'USERNAME',
    'password'  => 'PASSWORD',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => ''
  ]

我一直在使用一个类似于数据库配置的文件......

<?php

  namespace BareBones;

  use Illuminate\Database\Capsule\Manager as Capsule;

  $BareBonesCapsule = new Capsule;

  $BareBonesCapsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'DB_NAME',
    'username'  => 'USERNAME',
    'password'  => 'PASSWORD',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => ''
  ]);

  $BareBonesCapsule->setAsGlobal();
  $BareBonesCapsule->bootEloquent();

  use Illuminate\Database\Schema\Blueprint as Blueprint;
  use Illuminate\Database\Eloquent\Model as Eloquent;

我将开始从我的主要App课程启动Eloquent。这将阻止全局变量执行此操作。虽然$BareBonesCapsule不太可能会被使用,但我仍然希望保持我的框架清洁并将所有内容保留在其命名空间中。

我可以在配置文件中声明一堆常量......

<?php

  namesapce BareBones;

  define("driver", "mysql");
  define("host", "localhost");
  define("database", "DB_NAME");
  /* etc... */

这看起来并不干净,我假设有更好的方法可以做到这一点。其他框架如何处理这个问题,以及在保持与全局命名空间的分离时,我还有哪些替代配置方法?

1 个答案:

答案 0 :(得分:1)

您可以使用.ini文件并将其分成如下部分:

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

urls[svn] = "http://svn.php.net"
urls[git] = "http://git.php.net"

来自:http://php.net/manual/en/function.parse-ini-file.php

Symfony支持XML,PHP和YML,并允许您编写自己的配置解码器。