sheikhheera/iconfig

一个非常简单、智能、轻量级且动态的PHP配置管理器。

1.0.0 2015-09-10 19:37 UTC

This package is auto-updated.

Last update: 2024-09-20 11:37:11 UTC


README

一个简单、智能、轻量级且动态的PHP配置管理器。

Iconfig(即时配置)可以用作独立组件来管理任何PHP应用程序的配置。它可以加载保存在PHP文件中的设置,并在运行时构建一个数组。它提供了一些有用的方法来设置或检索应用程序运行时的任何配置。

安装

Iconfig使用Composer使事情变得简单。

学习如何使用Composer,并将其添加到require(在您的composer.json中)

"sheikhheera/iconfig": "1.0.0"

然后运行

composer update

库在Packagist上。

它是如何工作的?

基本上,PHP应用程序或MVC框架使用数组来配置,例如,这是一个数据库配置的示例

return array(
 	'default' => 'mysql',
	'connections' => array(
		'sqlite' => array(
			'driver'   => 'sqlite',
			'database' => 'public/caliber.sqlite',
			'prefix'   => 'cb_',
		),
		'mysql' => array(
			'driver'    => 'mysql',
			'host'      => 'localhost',
			'database'  => 'caliber',
			'username'  => 'root',
			'password'  => 'bossboss',
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => 'cb_',
		)
   ),
);

MVC框架或无框架的应用程序必须有一些常用设置,用户可以根据自己的需求进行配置,通常所有配置文件都位于单个文件夹中,通常使用config名称。因此,考虑到这一点,这个动态配置管理器(或你称之为什么)已经建立,它会从给定的路径加载所有文件。例如

初始化

$config = new Iconfig\Config('config');

上面的代码将从config文件夹中加载所有文件(它期望文件内部是数组),并将所有内容放入一个数组中(使用文件名作为组)。现在,你可以从数组中设置/获取任何项。例如,如果你想从数组中获取default项,那么你可以使用

$default = $config->getDatabase('default'); // mysql

那么,getDatabase()是什么?实际上,在这个例子中,我使用了database.php文件名来表示这个数组,因此我可以使用getDatabase()和setDatabase()来获取或设置项。如果我有名为session.php的文件,那么我可以用getSession()和setSession()来获取或设置会话管理设置。这意味着,当你将路径(所有配置文件保存的位置)传递给构造函数时,它将从这个路径/文件夹加载所有'php'文件。例如,在一个名为settings的文件夹中,你有三个文件在这个文件夹中,分别是database.php、session.php和例如cache.php,如果你用以下方式初始化它

$settings = new Iconfig\Config('settings');

那么,它将从这个文件夹加载所有三个'php'文件,并创建一个使用三个组(如

Array(
  'database' => array(
    'default' => 'mysql',
    'connections' => array(
		    'sqlite' => array(
			  'driver'   => 'sqlite',
			  'database' => 'public/caliber.sqlite',
			  'prefix'   => 'cb_',
		  )
  ),
  'session' => array(
    'driver' => 'native',
    'lifetime' 120,
    'files' => '/sessions'
  ),
  'chache' =>array(
    'path' => 'c:/web/app/storage'
  )
);

现在,你可以使用这个数组来检索设置,或者你也可以使用动态方法设置/更改任何预定义的设置。

动态方法

你可以使用setDatabase()和getDatabase()来设置/获取数据库配置,使用setSession()和getSession()来设置会话,等等。这些动态方法将在初始化后通过PHP的overloading技术对你可用。

$settings->setDatabase('default', 'sqlite');
$settings->getDatabase('default'); // sqlite

$settings->setSession('lifetime', 240);
$settings->getSession('lifetime'); // 240

使用别名

如果你想,你可以设置一个别名,并可以使用如下方式静态地使用方法

new Iconfig\Config('../myApp/config', 'Config'); // Config as Alias, you can use any name
if(Config::isExist('session')) {
    Config::setSession('driver', 'database');
    $sessionArray = Config::getSession(); // full array will be returned when called without argument
}

提供默认值

你也可以使用默认值,如下所示

$chache = getChache('path', '/web') // if path doesn't exist then "/web" will be returned

访问嵌套数组

如果您有三个数据库连接,并且所有连接都有一个 key 驱动,那么您可以指定您想要的哪个 driver key,例如:

Config::getDatabase('connections.sqlite.driver'); // get the driver from sqlite
Config::getDatabase('connections.pgsql.driver'); // get the driver from pgsql

使用回调

您可以使用闭包作为 getMethod($key, $callback)

$connections = Config::getDatabase('connections', function($data){
  if(is_array($data) && array_key_exists('sqlite', $data)) {
		Config::setDatabase('connections.sqlite.driver', 'myNewSqliteDriver');
		return Config::getDatabase('connections'); // this will return connections array with new value
	}
});

设置值时也可以使用相同的方法,例如 setDatabase('connections.pgsql.driver', 'pgsql')

使用 find() 方法进行搜索

您也可以使用 ::find() 来搜索项目,如下所示:

Config::find('sqlite'); // if it exists, you'll get the value
Config::find('connections.sqlite'); // it'll look sqlite in to the connections
Config::find('connections.sqlite.driver'); // it'll look driver in to the connections.sqlite array

使用 getAll() 方法获取所有数据

您还可以使用:

$all = Config::getAll();
var_dump($all); // full configuration array will be returned

使用 load() 方法加载更多文件

您也可以使用:

Config::load('filePath'); // new items will be added.

好了,这就是现在的全部内容。请随意使用或修改它以提高其功能,如果您发现任何错误,请告知我。希望我将来能够添加更多功能,愿真主保佑(In-Sha-Allah)。谢谢!

© 2013 Sheikh Heera. 知识共享许可协议下使用 MIT 许可。