sheikhheera / iconfig
一个非常简单、智能、轻量级且动态的PHP配置管理器。
Requires
- php: >=5.3.0
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 许可。