Dibi – No database selected

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
FilekCZE
Člen | 7
+
0
-

Čau,
jsem začátečník s nette a chtěl jsem si vytvořit blog podle návodu, ale vždycky mi to vyhodí chybu

„DibiDriverException #1046
No database selected“

V bootstrap.php mám:

<?php

/**
 * My Application bootstrap file.
 */
use Nette\Diagnostics\Debugger,
	Nette\Application\Routers\Route,
        Nette\Environment,
        Nette\Config\Configurator;


// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';


// Enable Nette Debugger for error visualisation & logging
Debugger::$logDirectory = __DIR__ . '/../log';
Debugger::$strictMode = TRUE;
Debugger::enable();


// Configure application
$configurator = new Nette\Config\Configurator;
$configurator->setTempDirectory(__DIR__ . '/../temp');

// Enable RobotLoader - this will load all classes automatically
$configurator->createRobotLoader()
	->addDirectory(APP_DIR)
	->addDirectory(LIBS_DIR)
	->register();

// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();

// Opens already started session
if ($container->session->exists()) {
	$container->session->start();
}

// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<action>[/<id>]', 'Homepage:default');


// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
dibi::connect(Environment::getConfig('database'));
$application->run();

a v config.neon:

common:
	parameters:
		database:
			driver: mysql
			host: localhost
			dbname: test
			user:
			password:


	php:
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes


	services:
		database:
			class: Nette\Database\Connection(
				'%database.driver%:host=%database.host%;dbname=%database.dbname%'
				%database.user%
				%database.password%
			)
			setup:
				- setCacheStorage(...)
				#- setDatabaseReflection( Nette\Database\Reflection\DiscoveredReflection() )

		authenticator: Authenticator( @database::table(users) )


	factories:


production < common:

development < common:

Vůbec nevím, kde dělám chybu. :/

Michal Vyšinský
Člen | 608
+
0
-

Změň název parametru z dbname na database. IMO myslím, že by ty parametry měly mít stejný název, jako je to tady

EDIT: A ještě bys měl změnit v bootstrap.php předání konfigurace připojení – Environment bych nepoužíval.

dibi::connect($container->params["database"]);

Editoval CherryBoss (8. 1. 2012 11:23)

FilekCZE
Člen | 7
+
0
-

Změnit z dbname na database jsem už zkoušel, ale vyhodí mi to

Nette\DI\ServiceCreationException
Service ‚database‘: Missing item ‚dbname‘.

Michal Vyšinský
Člen | 608
+
0
-

V těch parametrech pro database službu to taky musíš změnit:
Toto:

'%database.driver%:host=%database.host%;dbname=%database.dbname%'

Změň na toto:

'%database.driver%:host=%database.host%;dbname=%database.database%'

Ale jestli používáš v projektu jen dibi, tak je ta služba „database“ zbytečná.

FilekCZE
Člen | 7
+
0
-

Díky moc, už to funguje.