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

匿名 (未验证) 提交于 2019-12-03 08:59:04

问题:

Even after setting "db" in services.php I'm getting above exception.

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     )); }); 

I'm trying to fetch users from my table like this,

$user = Users::findFirst(1);  

That time, it is giving

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

:::::::::::::::::::::::::::::::::::Update::::::::::::::::::::::::::::::::

Here I'm loading my services.php file.

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(); } 

++++++++++++++++++++++++++++ Update 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();     }); 

回答1:

I encountered this issue before and the fix was the following:
I had two instances of:
$di = new FactoryDefault();
I had one in my index.php and one in my services.php file.
I removed the one in my index.php file, and it got rid of the error.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!