将DI设置为Phalcon中的新控制器和型号

时间:2014-05-06 17:06:13

标签: php phalcon

我在Phalcon PHP中创建RESTful API,我一直使用以下方式设置DI和数据库信息:

这就是我在DI中配置数据库的方式。

use Phalcon\Db\Adapter\Pdo\Postgresql as DbAdapter;
$di = new FactoryDefault();

$di['db'] = function() use ($config) {
return new DbAdapter(array(
            "host" => $config->database->host,
            "username" => $config->database->username,
            "password" => $config->database->password,
            "dbname" => $config->database->dbname,
            "schema" => $config->database->schema,
        ));
};

然后设置DI

$app->setDi($di);

我正在处理这样的行为:

//Gets a client information
$app->get('/client', array(new ClientController, 'getAction'));

问题是,当ClientController创建一个新的模型对象时,它只是返回一个错误,表示找不到该表,我认为是因为它没有从DI加载数据库信息,所以我的问题是,我怎么能在全球范围内设置这些信息,Phalcon不应该这样做吗?

数据库在主应用程序控制器中运行良好,但我想在其他不同的子控制器中对这些方法进行排序,并且数据库配置无法正常工作。

我按照文档中的说明执行此操作:

http://docs.phalconphp.com/es/latest/reference/micro.html

感谢。

1 个答案:

答案 0 :(得分:0)

这可能与您传递现有控制器并且Phalcon假设您已经设置它的事实有关,但我可能是错的...要找出,在getAction检查是否$ di设置:

public function getAction()
{
    echo isset($this->di) ? 'di is set' : 'di is not set';
}

如果未设置,则可以在配置路径之前手动设置它:

$controller->setDI($app->di); 
$app->get('/client', array($controller, 'getAction'));

如果没有指定DI,那将解决问题,但我对此表示怀疑:)发布有关实际错误的详细信息以及如果不能正常工作,如何配置模型。