在Phalcon中设置DI为新的控制器和模型


Setting DI to new Controller and models in Phalcon

我正在创建一个RESTful API在Phalcon PHP,我设置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

谢谢。

这可能与您传递现有控制器和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有关,尽管我对此表示怀疑:)发布更多关于实际错误的详细信息,以及如果不工作,您如何配置模型