我正在创建一个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有关,尽管我对此表示怀疑:)发布更多关于实际错误的详细信息,以及如果不工作,您如何配置模型