在li3中设置多个连接时,没有适配器设置异常

时间:2015-03-29 20:57:43

标签: php web lithium

我正在尝试在我的li3项目中设置多个连接,但是当我这样做时,我得到一个未被捕获的异常。我在app / confi / bootstrap / connections.php文件中设置了我的连接,然后由bootstrap.php文件加载。以下是我的关系:

 Connections::add('default', array(
    'development' => array(
            'type' => 'MongoDb',
            'host' => 'localhost',
            'database' => 'web_app'
    ),
    'test' => array(
        'type' => 'MongoDb',
        'host' => 'localhost',
        'database' => 'test_web_app'
    )
)
);

当我将它设置为这样并尝试浏览到我的项目时,我收到此错误:

 Fatal error: Uncaught exception 'lithium\core\ConfigException' with message 'No adapter set for configuration in class `lithium\data\Connections`.' in /var/www/site/libraries/lithium/core/Adaptable.php:233

但是,当我只有一个默认连接设置时,它可以正常工作。还有其他人遇到过这个问题吗?

- UPDATE-- 我从异常中查看堆栈跟踪,发现问题是由我在我的文件app / config / bootstrap / user.php中设置的过滤器引起的,然后由bootstrap.php加载

这是我的user.php文件的样子:

use app\models\Users;
use lithium\security\Password;

Users::applyFilter('save', function($self, $params, $chain) {
if ($params['data']) {
    $params['entity']->set($params['data']);
    $params['data'] = array();
}
if (!$params['entity']->exists()) {
    $params['entity']->password = Password::hash($params['entity']->password);
}
return $chain->next($self, $params, $chain);
});

根据堆栈跟踪,错误来自此文件的第21行。第21行唯一的事情是});所以我仍然不确定为什么会导致错误。

1 个答案:

答案 0 :(得分:1)

看来我被Li3的Simple Authentication user tutorial误导了。在他们的教程中,它让你在bootstrap目录中创建一个user.php文件,并在这个文件中有过滤器逻辑(正是我所拥有的)。然而,似乎这不是最好的方法,特别是在使用多个连接时,因为它会引发上面的异常。我已将过滤器逻辑移到app / models / Users.php中的Users模型文件中,不再获得异常。这与Gavin Davies在Li3 Authentication example中使用的设置类型相同。