config.neon a dibi::connect()

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

Dlouho jsem hledal (a bohužel nenašel) správný zápis pro: dibi::connect( $container->????[‚???‘] );
Respektive co dosadit za ty otázníky a jak správně zapsat config.neon, aby to běželo. Níže uvádím pro ty, co by dlouho zkoušeli a hledali jako já. Zkušenější prominou.

config.neon

common:
	php: # PHP configuration
		date.timezone = "Europe/Prague"

	services:
		robotLoader:
			run: true
		dibi:
			class: DibiConnection
			arguments: [ {
	  			driver: mysql
				charset: utf8
				hostname: localhost
				username: root
				password: 123456
				database: nette
				persistent: true
				lazy: true
				} ]

dibi::connect($container->dibi->config); žádné params[‚database‘] nebo params [‚dibi‘] mi neběželo.

Jan Voráček
Člen | 90
+
0
-

Tímhle configem si vytvoříš service ‚dibi‘. Teď už ji jenom nainjectovat do modelů. To můžeš buď přímo v configu:

common:
        php: # PHP configuration
                date.timezone = "Europe/Prague"

        services:
                robotLoader:
                        run: true
                dibi:
                        class: DibiConnection
                        arguments: [ {
                                driver: mysql
                                charset: utf8
                                hostname: localhost
                                username: root
                                password: 123456
                                database: nette
                                persistent: true
                                lazy: true
                                } ]
		model:
			class: Model
			arguments: ["@dibi"]

Nebo přes nějaký model locator. Příklad: https://gist.github.com/976155

Pokud bys chtěl dibi používat způsobem, jakým naznačuješ na konci dotazu (tj. voláním statických metod), nevytvářej si service, ale jenom si ulož parametry spojení. Následně v bootstrapu můžeš zavolat dibi::connect($configurator->container->params->database);

config.neon

common:
        php: # PHP configuration
                date.timezone = "Europe/Prague"

        services:
                robotLoader:
                        run: true
	database:
		driver: mysql
		charset: utf8
		hostname: localhost
		username: root
		password: 123456
		database: nette
		persistent: true
		lazy: true

Editoval Jan Voráček (12. 7. 2011 10:59)

esorimmer
Člen | 23
+
0
-

Bohužel tvoje verze: dibi:connect($configurator->container->params->database); a tvým config.neonem
mi neběží. Call to undefined function connect()

Jan Voráček
Člen | 90
+
0
-

Byl tam překlep. dibi:connectdibi::connect
A jestli ti můžu poradit, nesnaž se programovat způsobem copy&paste :)

esorimmer
Člen | 23
+
0
-

Vidíš, to jsem si nevšimnul :-) Jinak tak neprogramuju, ale stejně ten tvůj způsob nemůžu rochodit.
Configuration must be array, string or ArrayObject

Jan Voráček
Člen | 90
+
0
-

Máš aktuální verzi Nette? Jestli máš trochu starší release, je možný, že database je ArrayHash. Nicméně stačí přetypovat na pole (array)$configurator->container->params->database.

esorimmer
Člen | 23
+
0
-

Mám aktuální a hodnota NULL (tedy ne ArrayHash) :-/

Michalek
Člen | 210
+
0
-

Zkus

$configurator->container->params['database']

esorimmer
Člen | 23
+
0
-

Zkus

$configurator->container->params['database']

Díky, to už funguje.