我在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
感谢。
答案 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,那将解决问题,但我对此表示怀疑:)发布有关实际错误的详细信息以及如果不能正常工作,如何配置模型。