【问题标题】:Setting DI to new Controller and models in Phalcon在 Phalcon 中将 DI 设置为新的控制器和模型
【发布时间】:2014-05-06 17:06:13
【问题描述】:

我正在 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

谢谢。

【问题讨论】:

  • 如何在配置和 DI 中配置 db 服务?

标签: php phalcon


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2015-01-13
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多