NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

#1 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Aktuální informace jsou udržovány v dokumentaci.


Drtivou většinu parametrů Nette Frameworku lze nyní ovlivnit pomocí konfiguračního souboru. Konfigurace se zapisuje do sekce nette, ta se nachází pod hlavní sekcí common (pokud ji používáte):

Sessions

Lze nastavovat všechny PHP direktivy (ve formátu camelCase). Nastavení autoStart na hodnotu smart automaticky nastartuje již vytvořenou session, doporučil bych používat.

nette:
        session:
                autoStart: true  # výchozí je false
                expiration: +10days
                name: ...
                ...

Application

nette:
        application:
                debugger: true # panel v bluescreen
                catchExceptions: ...
                errorPresenter: ...

Routování

Tohle je zatím spíše experimentální záležitost.

nette:
        routing:
                debugger: true  # panel v Debugger baru
                routes:
                                index.php: Dashboard:default
                                '<presenter>/<action>[/<id>]': Dashboard:default

Security

Uvedením pole users vytvoříme SimpleAuthenticator, uvedením polí roles nebo resources vytvoříme autorizátor Nette\Security\Permission.

nette:
        security:
                debugger: true  # panel v Debugger baru
                frames: ... # hodnota hlavičky X-Frame-Options

                users:
                        frantisek: tajneheslo

                roles:
                        guest:
                        member:
                        admin: [member]  # admin dědí od membera

                resources:
                        file:

Maily

Standardní mailer je SendmailMailer, uvedením smtp aktivujeme SmtpMailer.

nette:
        mailer:
                smtp: ...
                # dále lze uvést host, port, username, password, secure, timeout

Pro vytvoření emailové zprávy můžeme použít $container->nette->createMail().

Databáze

Můžeme vytvořit více připojení, které uvedeme pod klíčem database. Takto vytvoříme spojení nazvané default a dostupné pod $container->nette->database->default.

nette:
        database:
                default:
                        dsn: "sqlite2:%appDir%/models/demo.db"
                        user: ...
                        password: ...
                        options: [PDO::MYSQL_ATTR_COMPRESS = true]
                        debugger: false # panel v Debugger baru
                        explain: false  # explain dotazů v Debugger baru
                        reflection: discovered # nebo conventional nebo název třídy

Framework tak vytvoří nejen objekt Nette\Database\Connection, ale nastavují mu i pomocné objekty jako reflection & cache a ve vývojářském režimu přidá panel do Debugger baru.

V rámci konfiguračního souboru se můžeme ke službě dostat přes autowiring (@Nette\Database\Connection), přes název služby (@nette.database.default) nebo si vytvořit alias a ten používat:

services:
        database: @nette.database.default

        authorizator: Auth(@database)

Formuláře

V konfiguračním souboru lze změnit výchozí chybové hlášky.

nette:
        forms:
                messages:
                        EQUAL: 'Please enter %s.'
                        FILLED: 'Please complete mandatory field.'
                        MIN_LENGTH: 'Please enter a value of at least %d characters.'

Pro vytvoření formuláře vhodného pro použití mimo presentery můžeme použít $container->nette->createBasicForm().

Šablony

Lze přepínat HTML a XHTML režim šablon:

nette:
        xhtml: no  # výchozí je true

Základní nakonfigurovanou šablonu s helpery a Latte vyrobí $container->nette->createTemplate().

DI

nette:
        container:
                debugger: true  # aktivuje panel v Debugger baru

Debugger

Lze konfigurovat některé parametry Nette\Diagnostics\Debugger a nastavovat panely do Debugger baru.

nette:
        debugger:
                email: %webmasterEmail%
                strictMode: TRUE
                editor: ...
                browser: ...
                bar: [IncludePanel, XDebugHelper('myIdeKey') ]
                blueScreen: [] # panely do blue-screen obrazovky

Cache

Objekt pro přístup ke keši vyrobí $container->nette->createCache($namespace = NULL).

Low-level úpravy

Všechny tyto nastavení ovlivňují podobu výsledného systémového DI kontejneru. Oproti přímému zápisu do sekcí services či factories nabízejí srozumitelnější a stručnější syntax. Nicméně zůstává možnost si jednotlivé služby ještě „doladit“ na nižší úrovni:

services:
        nette.mailer:
                class: MySmtpMailer


factories:
        nette.mail:
                setup:
                        - addHeader('X-Mailer', 'Nette Framework 2.0')

Nebo vytvořit nové služby poděděním existujících: (přidá metodu $container->createSecuredForm())

factories:
        securedForm < nette.basicForm:
                setup:
                        - addProtection()

 

#2 před 4 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 221

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Před 5ti hodinama bych se taky spletl :-D

PS: chybí mi u databáze možnost změny Reflexe… je to možné udělat z konfiguráku? Co jsem tak v rychlosti projel NetteExtension, tak není (nebylo). Je/Bude to možné?

 

#3 před 4 měsíci

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

David Grudl napsal(a):

Databáze

Chápu to správně, že tyto dva konfigurační soubory budou pracovat obdobně?

nette:
        database:
                default:
                        dsn: "sqlite2:%appDir%/models/demo.db"
                        user: ...
                        password: ...

services:
        database: @nette.database.default
parameters:
        database:
                dsn: "sqlite2:%appDir%/models/demo.db"
                user: ...
                password: ...

services:
        database: Nette\Database\Connection(%database.dsn%, %database.user%, %database.password%)

A bude mi při použití prvního způsobu fungovat v presenterech $this->getService('nette.database.default')? Takže bych ani nemusel definovat službu database v services?


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#4 před 4 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 221

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

xxxObiWan napsal(a):
A bude mi při použití prvního způsobu fungovat v presenterech $this->getService('nette.database.default')? Takže bych ani nemusel definovat službu database v services?

Ano bude… když to bude v nette, tak to nemusí být v services. A je to dostupné takto:

$container->nette->database->default

 

#5 před 4 měsíci

Felix
Člen
Registrovaný: 4. 7. 2010
Příspěvky: 114

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

David Grudl napsal(a):

Šablony

Lze přepínat HTML a XHTML režim šablon:

nette:
      xhtml: no  # výchozí je true

Základní nakonfigurovanou šablonu s helpery a Latte vyrobí $container->nette->createTemplate().

bud delam neco blbe, ale zkousel jsme xhtml: noxhtml: false a porad to generuje xhmtl

EDIT: jsem blbec, aktualizoval jsem nette a uz to jede, jsem si nevsim, ze uz to je opraveny..

Editoval Felix (26. 1. 13:24)


@xf3l1× | http://www.jfx.cz/ | Karta stastna, vecere slastna.

 

#6 před 4 měsíci

hAssassin
Člen
Registrovaný: 25. 1. 2011
Příspěvky: 159

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Je nějaká možnost jak nakonfigurovat připojení k dibi novým způsobem, nebo musím zůstat u starého, klasického? Dík.

 

#7 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

xxxObiWan napsal(a):

Chápu to správně, že tyto dva konfigurační soubory budou pracovat obdobně?

V jednom případě vytváříš službu sám, ve druhém případě ti ji vytvoří NetteExtension, který vytvoří i panel do Debugger baru atd. Obě cesty jsou možné.

hAssassin napsal(a):

Je nějaká možnost jak nakonfigurovat připojení k dibi novým způsobem, nebo musím zůstat u starého, klasického? Dík.

Nevím, co přesně myslíš novým a starým způsobem, každopádně jakýkoliv objekt/službu můžeš vytvořit klasicky v PHP (třeba bootstrapu) a uložit do containeru, zápisem v poli services (dibi: DibiConnection(...)) a pokud pro knihovnu existuje nějaká CompilerExtension, tak i vytvořením vlastní sekce v configu.

Pro dibi existuje DibiNetteExtension. Připojíme ji v bootstrapu:

$configurator = new Nette\Config\Configurator;
$configurator->onCompile[] = function($configurator, $compiler) {
        $compiler->addExtension('dibi', new DibiNetteExtension); // nazev sekce bude dibi
};

a přidáme sekci v config.neon:

dibi:
        driver   : mysqli
        host     : localhost
        username : root
        password : xxx
        database : dibi

Službu pak najdeme v $container->dibi->connection.

 

#8 před 4 měsíci

hAssassin
Člen
Registrovaný: 25. 1. 2011
Příspěvky: 159

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

@David Grudl: Aha, takhle se na to musí. Zkusim. Díky. Jinak tím klasickým způsobem jsem myslel definici sluzby dibi v config.neon:

services:
        dibi:
                class: \DibiConnection
                arguments: ['%database%']
...
parameters:
        database:
                driver   : mysql
                host     : localhost
                username : root
                password : xxx
                database : dibi

Problém právě je, že při aktualizaci na Nette RC1 a Dibi 2.0 přestane fungovat panel v debug baru.

 

#9 před 4 měsíci

RiskyNet
Člen
Registrovaný: 19. 9. 2011
Příspěvky: 20

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

hAssassin napsal(a):

Problém právě je, že při aktualizaci na Nette RC1 a Dibi 2.0 přestane fungovat panel v debug baru.

Zkus přidat do parametru databaze

profiler: TRUE

 

#10 před 4 měsíci

sumiisakua
Člen
Registrovaný: 24. 1. 2012
Příspěvky: 56

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Koukám, že config.neon nám pěkně nahradí bootstrap.php. ;)

 

#11 před 4 měsíci

HosipLan
Nette guru
Registrovaný: 1. 6. 2009
Příspěvky: 2637

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

@sumiisakua: to je jedině dobře ;)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#12 před 4 měsíci

hAssassin
Člen
Registrovaný: 25. 1. 2011
Příspěvky: 159

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

RiskyNet napsal(a):

hAssassin napsal(a):

Zkus přidat do parametru databaze

profiler: TRUE

To ja tam samozrejmne mam, ale stejne to nefunguje. Proble je totiz zde, pokud smazu ten parametr FALSE, tak to uz panel zobrazi v pohode, jinak se to do ty podminky nedostane. Problem asi bude v tom ze to registruju pres sluzbu tak jak sem psal vyse.

 

#13 před 4 měsíci

RiskyNet
Člen
Registrovaný: 19. 9. 2011
Příspěvky: 20

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

hAssassin napsal(a):

RiskyNet napsal(a):

hAssassin napsal(a):

Zkus přidat do parametru databaze

profiler: TRUE

To ja tam samozrejmne mam, ale stejne to nefunguje. Proble je totiz zde, pokud smazu ten parametr FALSE, tak to uz panel zobrazi v pohode, jinak se to do ty podminky nedostane. Problem asi bude v tom ze to registruju pres sluzbu tak jak sem psal vyse.

Uz to vidim, me to totiz funguje (taky registruju pres sluzbu) ale pouzivam ted min verzi, tam ten FALSE neni sorry

Editoval RiskyNet (26. 1. 17:42)

 

#14 před 4 měsíci

dakota
Člen
Registrovaný: 18. 1. 2010
Příspěvky: 163

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Chcem sa spýtať či je v neon podporovaný len tento zápis

services:
        nette.mailer:
                class: MyFileMailer

pretože pôvodne mi fungoval aj zápis

services:
        mailer:
                class: MyFileMailer

pričom ten teraz vyhodí chybu

Nette\DI\ServiceCreationException
Service 'nette.mail': Multiple services of type Nette\Mail\IMailer found: nette.mailer, mailer

 

#15 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Je to tím, že ve starší revizi mi chybělo u v názvu služby nette.. Správně je první zápis.

 

#16 před 4 měsíci

Milo
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

hAssassin napsal(a):

RiskyNet napsal(a):

hAssassin napsal(a):

Zkus přidat do parametru databaze

profiler: TRUE

To ja tam samozrejmne mam, ale stejne to nefunguje. Proble je totiz zde, pokud smazu ten parametr FALSE, tak to uz panel zobrazi v pohode, jinak se to do ty podminky nedostane. Problem asi bude v tom ze to registruju pres sluzbu tak jak sem psal vyse.

Problém je v tom, že se DibiConnection.php includuje přes RobotLoader a ne přes dibi.php ve kterém se loaduje třída DibiNettePanel pro panel. Když odstraníš to FALSE, RobotLoader ti automaticky natáhne i DibiNettePanel.

 

#17 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Problém s dibi by měl být vyřešen.

 

#18 před 4 měsíci

Caine
Člen
Registrovaný: 21. 12. 2011
Příspěvky: 67

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Zdravím, jak si nastavim u db vlastní Reflection?

 

#19 před 4 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Záleží, jak přesně ji registruješ – pokud pomocí NetteExtension, pak např. takto:

common:
        nette:
                database:
                        default:
                                # ...

        services:
                nette.database.default:
                        setup:
                                - setDatabaseReflection( MyReflection() )

Nebo se mýlím? Píši z paty…

 

#20 před 4 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Přidal jsem možnost uvést reflection: conventional

 

#21 před 4 měsíci

HosipLan
Nette guru
Registrovaný: 1. 6. 2009
Příspěvky: 2637

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Předpokládám, že v dokumentaci se takový přehled bude lépe udržovat: http://doc.nette.org/…te-framework


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#22 před 4 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

super… taky jsem vnoci zvažoval že to tam překlopím… :-)


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#23 před 3 měsíci

Felix
Člen
Registrovaný: 4. 7. 2010
Příspěvky: 114

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

David Grudl napsal(a):

Security

nette:
      security:
              roles:
                      guest:
                      member:
                      admin: [member]  # admin dědí od membera

              resources:
                      file:

Co tam dodelat i polozku rules, neco jako:

nette:
        security:
                rules:
                        guest: {[login], [view]}
                        user: [[homepage,articles], [add,delete,edit]]

@xf3l1× | http://www.jfx.cz/ | Karta stastna, vecere slastna.

 

#24 před 3 měsíci

hrach
Nette guru
Registrovaný: 11. 3. 2007
Příspěvky: 519

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

@Felix: –1 :P Něco, co nejde udělat plnohodnotně bych tam moc nestrkal. Už takhle je to víc konfigurace než programování – fuj :D

 

#25 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Je to opravdu super.

Nicméně routování v konfigu (ač experimentální) je takové svázané, neboť se nedají předávat flagy (jednosměrky, chráněné routy, …).

Plánuje se tato funkčnost přidat? Myslím, že by to mohla být jediná věc, která by experimentálnost přesunula k plnohodnotnému využití – nebo něco přehlížím?

Díky!

 

#26 před 3 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

uestla napsal(a):

Nicméně routování v konfigu (ač experimentální) je takové svázané, neboť se nedají předávat flagy (jednosměrky, chráněné routy, …).

Nedá se měnit ani třída atd. Chce to vymyslet nějakou pěknou syntax.

 

#27 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Felix napsal(a):

Co tam dodelat i polozku rules, neco jako:

Tohle si zatím realizuji pomocí

common:
        services:
                nette.authorizator:
                        setup:
                                - @self::allow( guest )

 

#28 před 3 měsíci

Vyki
Nette guru
Registrovaný: 12. 7. 2009
Příspěvky: 436

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Chtěl bych jenom upozornit na jednu maličkost.

services:
        database: @Nette\Database\Connection

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

        myService:
                class: MyServiceClass(@database, ClassWithParams('id', '%s_id', '%s'), ClassWithoutParams())

Pokud jako parametr volím třídu, která nemá v konstruktoru povinné paramatry, tedy PHP zápis

$class = new ClassWithoutParams;

musím v neon zápisu stejně použít prázdné závorky ClassWithoutParams() za názvem třídy. Jinak se to přeloží jako 'ClassWithoutParams' a ne new ClassWithoutParams. Dává to logiku, protože je to asi jediný způsob jak to v tom neon zápisu odlišit od řetězce, jenom se potřeba si to ohlídat.

Editoval Vyki (8. 2. 12:04)


http://ie6funeral.com – Kill IE6 ! ! !

 

#29 před 3 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 221

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Tohle

$class = new ClassWithoutParams;

bych úplně vyhodil… kompilátor c++ by na tomhle řval.

Editoval ViPEr*CZ* (8. 2. 18:07)

 

#30 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

A javascript?

 

#31 před 3 měsíci

Juan
Člen
Registrovaný: 11. 4. 2009
Příspěvky: 144

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

ViPErCZ napsal(a):

Tohle

$class = new ClassWithoutParams;

bych úplně vyhodil… kompilátor c++ by na tomhle řval.

Vyhodil odkud? Z PHP? :D

A co sem taháte C++ a Javascript?

 

#32 před 3 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 221

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Juan napsal(a):

ViPErCZ napsal(a):

Tohle

$class = new ClassWithoutParams;

bych úplně vyhodil… kompilátor c++ by na tomhle řval.

Vyhodil odkud? Z PHP? :D

A co sem taháte C++ a Javascript?

Ano myšleno z PHP. Jen jsem chtěl vyjádřit souhlas se správností syntaxe s používáním závorek u bezparametrického konstruktoru.

 

#33 před 3 měsíci

Nox
Nette guru
Registrovaný: 16. 10. 2010
Příspěvky: 319

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Kromě toho, že to je offtopic

  1. Bezzávorková konstrukce v C++ očividně existuje
  2. Správnost? V PHP je výraz new SomeClass; naprosto jednoznačný a nemůže znamenat nic jiného než instanciace třídy SomeClass bez předání parametrů, proto je to v PHP bez problémů povoleno.

 

#34 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Viper začal něco, co nechápu, proto jsem jeho C++ snažil trumfnout javascriptem…

Nicméně chápu, že to, na co upozornil Vyki, může být matoucí. Jednak instance se vytváří pomocí závorek, ale u specifikace class: se píše jen řetězcovité jméno třídy (čili bez závorek).

 

#35 před 3 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 221

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

@Nox: kruci… trapas… ono to fakt existuje… beru zpět… přepracovanost.

 

#36 před 3 měsíci

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5835

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Nicméně chápu, že to, na co upozornil Vyki, může být matoucí. Jednak instance se vytváří pomocí závorek, ale u specifikace class: se píše jen řetězcovité jméno třídy (čili bez závorek).

Protože class je skutečně jméno třídy, tedy řetězec. Má smysl jej uvádět pouze v situacích, kdy se volá nějaká továrna a není známo, co vrací. Obecné doporučení by asi mělo být používat vždy factory.

 

#37 před 3 měsíci

Vyki
Nette guru
Registrovaný: 12. 7. 2009
Příspěvky: 436

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Ještě bych si dovolil jednu poznámku ohledně

[...]
routes:
        index.php: Dashboard:default
        '<presenter>/<action>[/<id>]': Dashboard:default
[...]

Na definici jednoduchých rout je to super. I kdyby to z Nette zmizelo ve svém FW si to nechám. Má to ale jednu vadu na kráse – nelze definovat FLAG. Osobně jsem si ve svém Extension dodělal podporu, která umožňuje psát toto:

[...]
routes:
        index.php: [Homepage:default, ONE_WAY]
        '<presenter>/<action>[/<id>]': Homepage:default
[...]

Oproti původnímu kódu v NetteExtension vypadá můj kód následovně.

[...]
if(is_array($action))
        $router->addSetup('$service[] = new Nette\Application\Routers\Route(?, ?, ?)', array($mask, $action[0], constant("Nette\Application\Routers\Route::{$action[1]}")));
else
        $router->addSetup('$service[] = new Nette\Application\Routers\Route(?, ?)', array($mask, $action));
[...]

To s tím constant tam mám kvůli tomu, že jsem si nedovedl představit, jak budu psát jako FLAG v konfiguračním souboru celou cestu k té konstantě. To by asi moc hezké nebylo tam psát Nette\Application\Routers\Route::ONE_WAY
Asi to není úplně ideální, ale minimálně u jedné routy v každé aplikaci ten FLAG napsat potřebuji.


http://ie6funeral.com – Kill IE6 ! ! !

 

#38 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Koukni 3 dny zpátky ;-)

 

#39 před 3 měsíci

Vyki
Nette guru
Registrovaný: 12. 7. 2009
Příspěvky: 436

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

uestla napsal(a):

Koukni 3 dny zpátky ;-)

Tak to sorry za spam, toho jsem si nevšiml.

Chtěl jsem se ještě zeptat jestli někdo neví, jakým způsobem si lze jednoduše pomocí nové konfigurace zaregistrovat vlastní makro. Mám již vytvořenou třídu potomka MacroSet, která ovšem chce ve statické metodě install instanci Nette\Latte\Compiler a netuším jak se k ní snadno v při konfiguraci dostat. Dříve jsem to řešil přetížením metody Presenter::templatePrepareFilters v BasePresenteru, ale to samé potom musím udělat i v BaseControl, tak mě napadlo zda by to nyní nešlo elegantněji.


http://ie6funeral.com – Kill IE6 ! ! !

 

#40 před 3 měsíci

HosipLan
Nette guru
Registrovaný: 1. 6. 2009
Příspěvky: 2637

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

@Vyki: něco jako

services:
        nette.latte:
                setup:
                        - MyMacroSet::install($service->compiler)

Editoval HosipLan (10. 2. 7:39)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#41 před 3 měsíci

gmvasek
Nette guru
Registrovaný: 19. 3. 2009
Příspěvky: 1015

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Nebo pokud registruješ maker hromadu, extendni si Nette\Latte\Engine, v konstruktoru zaregistruj makra a v configu třídu nahraď svou.

 

#42 před 3 měsíci

Vyki
Nette guru
Registrovaný: 12. 7. 2009
Příspěvky: 436

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

HosipLan napsal(a):

@Vyki: něco jako …

Když dám místo service factory tak už se blížím k úspěchu a do těla té továrničky mi to vloží to MyMacroSet::install. Nevypořádá se to ale s tím ($service->compiler) vypíše to Unexpected '>compiler)' on line 51, column 41, takže jsem šel zatím cestou rozšíření Nette\Latte\Engine.

Edit: Koukám, že lze také využít makro {use MacroSet}, ale to se mi moc nelíbí dávat tuto logiku do šablony.

Editoval Vyki (10. 2. 11:18)


http://ie6funeral.com – Kill IE6 ! ! !

 

#43 před 3 měsíci

martyx
Nový člen
Registrovaný: 11. 2. 2012
Příspěvky: 5

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Pokouším se přepsat konfiguraci session do neonu. Poradil by mi někdo z nette pardálů, jestli jde nastavit nějakým způsobem cookiePath, tak aby vedla k projektu, zanořeném ve více složkách? V bootstrapu to řeším takto:

$container->session->setCookieParameters($container->httpRequest->url->scriptPath, $_SERVER['SERVER_NAME']);

Něco jako tohle, což mi nejde:

nette:
    session:
        autoStart: smart
        expiration: +14days
        cookie_path: @httpRequest.uri.scriptPath

Bez toho mám část konfigurace v neonu a část v bootstrapu, což bych rád měl na jednom místě. Díky za pomoc.

 

#44 před 3 měsíci

mkoubik
Nette guru
Registrovaný: 28. 4. 2009
Příspěvky: 259

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Nevím jestli není plus speciální znak, zkus to dát do uvozovek: expiration: '+14days'.

 

#45 před 3 měsíci

martyx
Nový člen
Registrovaný: 11. 2. 2012
Příspěvky: 5

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

mkoubik napsal(a):

Nevím jestli není plus speciální znak, zkus to dát do uvozovek: expiration: '+14days'.

Díky, ale v tom problém není, to funguje dobře. Ostatně je to podle Davidova vzoru z úvodu tohodle topicu. Jedná se mi o to cookie_path, resp. jak mu nastavit cestu. Můžu to tam samozřejmě dát ručně na tvrdo, ale pohodlnější by pro mě bylo dynamické načtení cesty. Zkusil jsem jen odhadem @httpRequest.uri.scriptPath, ovšem to je nejspíš blbost. Třeba existuje nějaká možnost.

 

#46 před 3 měsíci

RiskyNet
Člen
Registrovaný: 19. 9. 2011
Příspěvky: 20

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Já si taky střelím :) dle „Lze nastavovat všechny PHP direktivy (ve formátu camelCase)“

zkusil jsi

cookiePath: @httpRequest.uri.scriptPath

 

#47 před 3 měsíci

martyx
Nový člen
Registrovaný: 11. 2. 2012
Příspěvky: 5

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

RiskyNet napsal(a):

Já si taky střelím :) dle „Lze nastavovat všechny PHP direktivy (ve formátu camelCase)“

zkusil jsi

cookiePath: @httpRequest.uri.scriptPath

Zkusil. V tom taky problém není. Nejde o název vlastnosti, ale její hodnotu. Pokud tam zapíšu ručně

session:
    autoStart: smart
    expiration: +14days
    cookie_path: /projects/project

tak je to v pohodě, viz dump session:

Nette\Http\Session(4) {
   regenerationNeeded private => NULL
   options private => array(16) {
      cookie_domain => "localhost" (9)
      cookie_secure => NULL
      cookie_path => "/projects/project" (17)
      gc_maxlifetime => 1209600
      cookie_lifetime => 1209600
      ...
   }

ale můj pokus s

session:
    autoStart: smart
    expiration: +14days
    cookie_path: @httpRequest.uri.scriptPath

končí laděnkou s hláškou

Reference to missing service 'httpRequest.uri.scriptPath'

Zajímavý je, že když tam dám jen službu httpRequest

session:
    autoStart: smart
    expiration: +14days
    cookie_path_test: @httpRequest

tak to projde, viz dump session:

Nette\Http\Session(4) {
   regenerationNeeded private => NULL
   options private => array(16) {
      cookie_domain => "localhost" (9)
      cookie_secure => NULL
      cookie_path_test => Nette\Http\Request(9) {
         method private => "GET" (3)
         url private => Nette\Http\UrlScript(10) { ... }
         query private => array(0)
         post private => array(0)
         files private => array(0)
         cookies private => array(7) { ... }
         headers private => array(9) { ... }
         remoteAddress private => "127.0.0.1" (9)
         remoteHost private => NULL
      }
      gc_maxlifetime => 1209600
      cookie_lifetime => 1209600
      ...
   }

Nejspíš je pravděpodobný, že jsem tele a nechápu něco důležitýho. Např. něco s životním cyklem. Třeba v době sestavování kontejneru, ve chvíli zpracovávání mojí session, ještě není nastavana služba httpRequest.

 

#48 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

Co vím, tak NEON zatím neumí zřetězené volání metod na službě, čili nejde

@httpRequest::getUrl()::getScriptPath() # nebo něco na ten způsob

Co ale jde, je udělat si pomocnou službu na UrlScript a na ní pak volat getScriptPath():

nette:
        session:
                autoStart: smart
                expiration: '+ 14 days'
                cookie_path: @urlScript::getScriptPath()

services:
        urlScript:
                factory: @httpRequest::getUrl()

Nezkoušel jsem, píši to z paty, snad bude fungovat …

 

#49 před 3 měsíci

martyx
Nový člen
Registrovaný: 11. 2. 2012
Příspěvky: 5

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

uestla napsal(a):

Co vím, tak NEON zatím neumí zřetězené volání metod na službě, čili nejde

Díky, to zkusím. K tomu řetězení mě navedlo dibi, resp. @dibi.connection. Protože takhle mi to funguje.

services:
     sitemapModel: \Models\Sitemap\SitemapModel(@dibi.connection)
     ...

Tak jsem to zkusil i na tento případ. Ale ta pomocná služba je dobrej nápad. To by mělo jít.

 

#50 před 3 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: NetteExtension aneb konfigurace všeho v Nette pomocí config.neon

No ale

@dibi.connection

přistupuje k „subservice“, neboli

services:
        dibi:
                connection: DibiConnection( ... )

Což je jiné, než když se volá metoda na službě, nebo se mýlím?

 
Stránky: 1 2 Next

RSS feed RSS tématu

Zápatí