Lysine介绍(二)载入及配置

上一篇:《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)

 

下一篇:Lysine介绍(三)MVC - Application

你可能感兴趣的:(Web,mvc,mysql,PHP,框架)