Dva zápisy config.neon. Jeden funguje a druhý nie

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

Zdaravím,
Prosím vás, aký je rozdiel v týchto zápisoch čo mám v config.neon. Jeden spôsob je zakomentovaný a druhý nie. Ten zakomentovaný funguje(ten je z príkladu quick start) a ten druhý som sopčil z fóra. Ten druhý hádže chybu: „No service of type Nette\Database\Context found. Make sure the type hint in App\Presenters\HomepagePresenter::__construct() is written correctly and service of this type is registered.“
V bootstrape na riadku: $container->getService(‚application‘)->run();

parameters:
	database:
		driver: mysql
		host: localhost
		dbname: quickstart
		user: root
		password: toor

#nette:
#	database:
#		dsn: 'mysql:host=127.0.0.1;dbname=quickstart'
#		user: root
#		password: toor
#		options:
#			lazy: yes

services:
	database:
		class: Nette\Database\Connection
		arguments: ['%database.driver%:host=%database.host%;dbname=%database.dbname%', %database.user%, %database.password%]

Ja som bol v tom, že tým zápisom práve tú službu zaregistrujem.

David Matějka
Moderator | 6445
+
0
-

pouzij to zakomentovane. Tim druhym vytvoris pouze sluzbu Nette\Database\Connection, tim prvnim se nette postara o vytvoreni sluzeb jako Connection, Context, spravne nastavi reflexi, zaregistruje panel atd.

mkoubik
Člen | 728
+
0
-

V zakomentovaném případě NetteExtension automaticky zaregistruje všechny potřebné služby včetně contextu. Pokud chceš ty služby definovat ručně, tak je musíš uvést všechny (viz https://github.com/…xtension.php), ty vytváříš jen connection a pak požaduješ context který neexistuje.

Čamo
Člen | 798
+
0
-

A aký je mdzi tými dvoma spôsobmi rozdiel?
Nejako nechápem, kedy treba použiť jeden zápis a kedy druhý.
Viete to niekto vysvetliť? Mám v tom značný chaos.

mkoubik
Člen | 728
+
0
-

Sekce services: slouží k definici vlastních služeb. Konfigurace databáze je trochu složitější (každé připojení obsahuje několik služeb), takže to za tebe udělá NetteExtension, které se konfiguruje v sekci nette:, pokud nepotřebuješ dělat nic extra divokýho, tak určitě použij tenhle způsob.

Čamo
Člen | 798
+
0
-

Ahá, takže vlastné služby. Díky.
A ešte mám otázku. Ten DI kontainer by sa mal ukladať do cache. Niečo také som tam aj našiel(okrem iného). Ale podľa toho čo píše ladenka, sa DI vytvára pri každej požiadavke. Je to tým, že som na lokalhoste, či ako funguje to kešovanie.

Editoval Čamo (5. 5. 2014 17:50)

David Matějka
Moderator | 6445
+
0
-

@Čamo: DIC se pregenerovava jen pri zmene souboru, ktery by ho mohl ovlivnit. Podle ceho si zjistil, ze se pregenerovava pri kazdem requestu?

mkoubik
Člen | 728
+
0
-

Ta cache závisí na souborech (neon) ze kterých je kontejner vytvořený, když některý z nich upravíš, tak se cache invaliduje a vytvoří znovu.

Šaman
Člen | 2666
+
0
-

Ty použiješ to zakomentované (tedy necháš Nette extension vytvořit databázi) a smažeš jak ty parametry (tím jsi jen vytvořil proměnnou typu pole pojmenovanou ‚database‘, nic víc) a taky smaž ty řádky v sekci services (to je pokyn k vytvoření třídy Connection, které se předá jako parametr výše vytvořená proměnná pole). To je to, co ti nejspíš hází laděnku, pokud zakomentuješ jen ty params a pak zkoušíš ručně vytvořit něco, co nemá správné parametry.

Čamo
Člen | 798
+
0
-

Ok, díky za vysvetlenie.