获取异常:服务';db';不是';在Phalcon的依赖项注入容器中发现t


getting exception : Service 'db' wasn't found in the dependency injection container in Phalcon

即使在services.php中设置了"db",我也会遇到上述异常。

services.php

$di->set('db', function() use ($config) {
    $dbclass = 'Phalcon'Db'Adapter'Pdo''' . $config->database->adapter;
    return new $dbclass(array(
        "host"     => $config->database->host,
        "username" => $config->database->username,
        "password" => $config->database->password,
        "dbname"   => $config->database->name
    ));
});

我正试图像这样从我的表中提取用户,

$user = Users::findFirst(1); 

那一次,它给出了

    Service 'db' wasn't found in the dependency injection container in Phalcon

在这里,我正在加载我的services.php文件。

public/index.php

error_reporting(E_ALL);
use Phalcon'Mvc'Application;
use Phalcon'Config'Adapter'Ini as ConfigIni;
try {
    define('APP_PATH', realpath('..') . '/');
    /**
     * Read the configuration
     */
    $config = new ConfigIni(APP_PATH . 'app/config/config.ini');
    require APP_PATH . 'app/config/loader.php';
    require APP_PATH . 'app/config/services.php';
    $application = new Application($di);
    echo $application->handle()->getContent();
} catch (Exception $e){
    echo $e->getMessage();
}

++++++++++++++++++++++++++++更新2

loader.php

    $loader = new 'Phalcon'Loader();
    /**
     * We're a registering a set of directories taken from the configuration file
     */
    $loader->registerDirs(
        array(
            APP_PATH . $config->application->controllersDir,
            APP_PATH . $config->application->pluginsDir,
            APP_PATH . $config->application->libraryDir,
            APP_PATH . $config->application->modelsDir,
            APP_PATH . $config->application->formsDir,
        )
    )->register();

services.php

    use Phalcon'Mvc'View;
    use Phalcon'DI'FactoryDefault;
    use Phalcon'Mvc'Dispatcher;
    use Phalcon'Mvc'Url as UrlProvider;
    use Phalcon'Mvc'View'Engine'Volt as VoltEngine;
    use Phalcon'Mvc'Model'Metadata'Memory as MetaData;
    use Phalcon'Session'Adapter'Files as SessionAdapter;
    use Phalcon'Flash'Session as FlashSession;
    use Phalcon'Events'Manager as EventsManager;
    /**
     * The FactoryDefault Dependency Injector automatically register the right services providing a full stack framework
     */
    $di = new FactoryDefault();
    /**
     * We register the events manager
     */
    $di->set('dispatcher', function() use ($di) {
        $dispatcher = new Phalcon'Mvc'Dispatcher();
        return $dispatcher;
    });
    /**
     * The URL component is used to generate all kind of urls in the application
     */
    $di->set('url', function() use ($config){
        $url = new UrlProvider();
        $url->setBaseUri($config->application->baseUri);
        return $url;
    });

    $di->set('view', function() use ($config) {
        $view = new View();
        $view->setViewsDir(APP_PATH . $config->application->viewsDir);
        $view->registerEngines(array(
            ".volt" => 'volt'
        ));
        return $view;
    });
    /**
     * Setting up volt
     */
    $di->set('volt', function($view, $di) {
        $volt = new VoltEngine($view, $di);
        $volt->setOptions(array(
            "compiledPath" => APP_PATH . "cache/volt/"
        ));
        $compiler = $volt->getCompiler();
        $compiler->addFunction('is_a', 'is_a');
        return $volt;
    }, true);
    /**
     * Database connection is created based in the parameters defined in the configuration file
     */
    $di->set('db', function() use ($config) {
        $dbclass = 'Phalcon'Db'Adapter'Pdo''' . $config->database->adapter;
        return new $dbclass(array(
            "host"     => $config->database->host,
            "username" => $config->database->username,
            "password" => $config->database->password,
            "dbname"   => $config->database->name
        ));
    });
    /**
     * If the configuration specify the use of metadata adapter use it or use memory otherwise
     */
    $di->set('modelsMetadata', function() {
        return new MetaData();
    });
    /**
     * Start the session the first time some component request the session service
     */
    $di->set('session', function() {
        $session = new SessionAdapter();
        $session->start();
        return $session;
    });
    /**
     * Register the flash service with custom CSS classes
     */
    $di->set('flash', function(){
        return new FlashSession(array(
            'error'   => 'alert alert-danger',
            'success' => 'alert alert-success',
            'notice'  => 'alert alert-info',
        ));
    });
    /**
     * Register a user component
     */
    $di->set('elements', function(){
        return new Elements();
    });

我以前遇到过这个问题,修复如下:
我有两个例子:
$di = new FactoryDefault();
我的index.php和services.php文件中都有一个
我删除了index.php文件中的那个,它就消除了这个错误。

更改它为我工作的所有$di调用的顺序

我在Phalcon CLI应用程序中遇到了同样的错误。我通过将DbAdapter的名称空间导入cli.php 来解决这个问题

use Phalcon'Db'Adapter'Pdo'Mysql as DbAdapter;

并添加以下代码

$di['db'] = function() {
    return new DbAdapter(array(
        "host"     => YOUR_HOST,
        "username" => YOUR_USERNAME,
        "password" => YOUR_PASSWORD,
        "dbname"   => YOUR_DB_NAME
    ));
};

之前

$console->setDI($di);