Dva zápisy config.neon. Jeden funguje a druhý nie
- Čamo
- Člen | 798
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
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
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.
- mkoubik
- Člen | 728
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
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
@Čamo: DIC se pregenerovava jen pri zmene souboru, ktery by ho mohl ovlivnit. Podle ceho si zjistil, ze se pregenerovava pri kazdem requestu?
- Šaman
- Člen | 2666
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.