Nette 2.0 config.neon a dibi pripojení

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Přecházím na novou verzi nette a nedaří se mi připojit k databázy prošel jsem téměř celé fórum ale nikde jsem nenašel funkční příklad připojení k databázy za použití dibi. hláška Dibi is not connected to database

dříve se do bootstrapu dalo dibi::connect(Environment::getConfig(‚database‘)); a byl pokoj :)
ted je nějaký nový zápis který nemohu najít…

můj config:

<?php

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

	services:
		robotLoader:
			run: true

		database:
			class: Connection
			arguments: ['mysql:host=localhost;dbname=poradna', 'root', 'root']

		model:
			class: Model
			arguments: ["@database"]

		authenticator:
			factory: ["@model", createAuthenticatorService]


production < common:


development < common:
database:
driver: mysql
host: localhost
username: root
password: root
database: test
charset: utf8
profiler: true
console < common:

?>

a muj bootstrap:

<?php
<?php

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


// Enable Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();



// Load configuration from config.neon file
$configurator = new Configurator;
$container = $configurator->loadConfig(dirname(__FILE__) . '/config.neon');




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


// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();

?>

Tak vyřešeno
byl problém v tabulátorech
takže funkční připojení config.neon

<?php
common:
	php: # PHP configuration
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes

	services:
		robotLoader:
			run: true

		database:
			class: Connection
			arguments: ['mysql:host=localhost;dbname=poradna', 'root', 'root']

		model:
			class: Model
			arguments: ["@database"]

		authenticator:
			factory: ["@model", createAuthenticatorService]


production < common:


development < common:
	database:
		driver: mysql
		host: localhost
		username: root
		password: root
		database: poradna
		charset: utf8
		profiler: true
console < common:

?>

a bootstrap:

<?php

/**
 * My Application bootstrap file.
 */



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


// Enable Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();

//Environment::loadConfig();

// Load configuration from config.neon file
$configurator = new Configurator;
$container = $configurator->loadConfig(dirname(__FILE__) . '/config.neon');
//Environment::loadConfig();

dibi::connect(Environment::getConfig('database'));


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


// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();

?>

Editoval KillPrd (29. 6. 2011 11:39)

uestla
Backer | 796
+
0
-

V Neonu (ve kterém se teď config píše) hraje roli odsazení, čili nejrpve

# ...

development < common:
	database:
		driver: mysql
		host: localhost
		username: root
		password: root
		database: test
		charset: utf8
		profiler: true

console < common:

# ...

A v bootstrapu

$configurator = new Configurator;
$container = $configurator->loadConfig(dirname(__FILE__) . '/config.neon');

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

EDIT: použij moje řešení nezávislé na Environmentu. Díky.

PS: občas je dobré číst odpovědi na svůj dotaz :-)

PPS: btw tím EDITem jsi to pěkně zaplácnul a zaspamoval a celkově znepřehlednil…

Editoval uestla (29. 6. 2011 12:59)

MelkorNemesis
Člen | 36
+
0
-

Dibi sice nabizi pristup i pouze pres static call, ale pokud jsem s dibi pracoval v nette s DI, tak jsem si cele dibi radeji zaregistroval jako sluzbu v Configuratoru. Predani nastaveni databaze mam stejne, jde mi jen o pristup k dibi.

<?php

use Nette\DI;

class Configurator extends Nette\Configurator
{

    public static function createServiceDibi(DI\Container $container)
    {
	    $dibiConnection = new \DibiConnection($container->params['database']);
	    $dibiConnection->query('SET NAMES UTF8');

	    return $dibiConnection;
    }

}
?>

a volal nasledne v kodu

<?php
$this->context->dibi;
?>

Editoval MelkorNemesis (2. 7. 2011 11:55)

Tomáš Votruba
Moderator | 1114
+
0
-

Pokud byste ještě někdo řešil jak na Nette 2.0 a dibi připojení, zde je ukázové řešení.

vosy
Člen | 525
+
0
-

uestla napsal(a):

V Neonu (ve kterém se teď config píše) hraje roli odsazení, čili nejrpve

# ...

development < common:
	database:
		driver: mysql
		host: localhost
		username: root
		password: root
		database: test
		charset: utf8
		profiler: true

console < common:

# ...

A v bootstrapu

$configurator = new Configurator;
$container = $configurator->loadConfig(dirname(__FILE__) . '/config.neon');

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

v config.neon mam
`
.
.
.
..
development < common:
database:
host: 127.0.0.1
database: _blog
username: ****
password: ****
driver: mysqli
charset: utf8
lazy: TRUE`

v bootstrap.php mam
`.
.
.
.

// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . ‚/config/config.neon‘);
$configurator->addConfig(__DIR__ . ‚/config/config.local.neon‘, $configurator::NONE); // none section
$container = $configurator->createContainer();

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

return $container;`

vysledek:
Nette\InvalidStateException
Found sections ‚database‘ in configuration, but corresponding extensions are missing.

// Create Dependency Injection container from config.neon file
23: $configurator->addConfig(__DIR__ . ‚/config/config.neon‘);
24: $configurator->addConfig(__DIR__ . ‚/config/config.local.neon‘, $configurator::NONE); // none section
25: $container = $configurator->createContainer();
26:
27: dibi::connect( $container->params[‚database‘] );

jak mohu pokracovat, jsem zacatecnik a trochu me tu spousta veci mate, zvlaste navody pro zacatecniky.