上一篇:《Lysine介绍(一)》
Lysine的载入非常简单,只需要包含框架目录下的core.php即可,只要包含了这个文件,在掉用框架的类时就会自动包含对应的文件(使用spl_auto_register()函数)
长期使用QeePHP习惯了,有时候写点简单脚本也希望可以用到QeePHP的类,基于这种考虑,所以载入尽量的简单,只要包含了core.php,就可以把Lysine当作一个类库来使用
Lysine的autoloader只负责框架自身的类的自动载入,不管web应用自己开发的类的自动载入(在Lysine\Applicaiton另外有一个autoloader来做web应用的类的载入)
Lysine的配置数据使用原生的PHP数组来描述,而且没有格式限制,程序员喜欢怎么定义就怎么定义
<?php
require '/path/to/lysine/core.php';
use Lysine\Config;
$config = array(
'db' => array(
'pool' => array(
'__default__' => array(
'dsn' => 'pgsql:host=127.0.0.1 dbname=test',
'user' => 'dev',
'pass' => 'abc',
),
),
),
);
Config::import($config);
数组只需要用Lysine\Config::import()方法导入即可,至于这个数组是从另外一个包含文件过来,还是解析自其它来源都无所谓
读取配置信息可以用:
<?php
use Lysine\Config
// 相当于$config['db']['pool'];
var_dump(Config::get('db', 'pool'));
// 也可以用内置函数
var_dump(cfg('db', 'pool'));
// 如果key不存在则返回false
var_dump(cfg('db', 'pool', 'not_exists'));
// 也可以用array方式传参
var_dump(cfg(array('db', 'pool'));
可以在运行时修改配置信息:
<?php
use Lysine\Config;
// 相当于:
// $config['db']['pool']['other'] = array(
// 'dsn' => 'mysql: host=127.0.0.1 dbname=test',
// 'user' => 'dev',
// 'pass' => 'abc'
// );
Config::set('db', 'pool', 'other', array(
'dsn' => 'mysql: host=127.0.0.1 dbname=test',
'user' => 'dev',
'pass' => 'abc'
));
设计时考虑过像QeePHP那样使用YAML保存配置信息,但是问题有:
1、有解析成本(需要用缓存来缓解)
2、语法错误导致解析失败,有不少QeePHP用户碰到这个问题,虽然不是QeePHP的错,但的确会给某些人造成麻烦
3、有人用YAML做配置文件的目的在于不同的语言可以共享配置,但我觉得这种情况不常见,不考虑也罢
框架本身的类不会对配置信息有强制要求,如果你按照推荐的格式写当然最省事,但是如果你喜欢自己的一套,也无不可,比如
<?php
require_once '/path/to/lysine/core.php';
use Lysine\Config;
$config = array(
'db' => array(
'my_pool' => array(
'default' => array(/* ... */),
'other' => array(/* ... */),
'more' => array(/* ... */),
),
),
);
Config::import($config);
// 告诉Db\Pool使用db my_pool路径,默认adapter叫default
use Lysine\Db\Pool;
Pool::$configPath = array('db', 'my_pool');
Pool::instance()->setDefaultNode('default');
// 如果你按照推荐的db pool __default__定义,就不需要上面的声明
为什么要做这种开放式设计?因为我不认为我定义的就是最好的,如果你喜欢,按照推荐做也可以,如果你喜欢自己的一套,框架也尽量不挡你的道(见开发原则3)