private \Nette\Application\Route::$metadata → protected?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
JakubJarabica
Gold Partner | 184
+
0
-

Už sa to raz riešilo: https://github.com/…e/issues/104

Práve som narazil na rovnaký problém. Píšem vlastný router, ktorý má matchovat slugy z databázy, má byť multijazyčný(a budem aj trošku prasák, rovno do target presenteru pošlem vytiahnutú entitu z DB – zatiaľ to mám v dibi, keď to bude v Doctrine tento problém samozrejme odpadne).

V maske chcem vynútiť použitie <lang> a <slug> a v konštruktori mojej routy testovať ich prítomnosť. To isté, čo je tu: Route#232, len pre vlastné konštanty SLUG_KEY a LANG_KEY. Nemôžem k tomu pristupovať v potomkovi, lebo $metadata sú private. Cez extensionMethod to ohackovať(getter) nejde.

Chyba v návrhu mi to nepríde, nakoľko Routa bude pracovať s DB a kešou, bez extendu to rozhodne nechcem robiť(Route je napísaná super a o jej featury prísť nechcem) a kontrolu vyššie by som rád mal tiež. Zatiaľ som si ohackoval Nette.

Vaše názory? Thx :-)

Editoval JAM3SoN (25. 12. 2011 14:21)

Filip Procházka
Moderator | 4668
+
0
-

Inspirace: https://github.com/…S/Router.php Nešlo by to takto nějak?

JakubJarabica
Gold Partner | 184
+
0
-

Máš iný konštruktor ako ja a parametre pre parent::__construct si vyrábaš v konštruktori potomka.

U mňa sa maska vkladá zvonku v bootstrape(parametre ako v Nette Route + ďalšie vlastné), takže nemôžem predpokladať ako bude vyzerať maska – tá sa posunie konštruktorom parentovi a v potomkovi v $metadata chcem nájsť dané <>, či tam naozaj sú.

Filip Procházka
Moderator | 4668
+
0
-

Takže ti stačí $router->getDefaults() ?

JakubJarabica
Gold Partner | 184
+
0
-

D'oh! Asi 20 minút som kukal do API a toto som prehliadol :/ Okrem iného to aj tak vyriešim pridaním predvolených hodnôt a túto kontrolu môžem zrušiť. Vďaka! :)