case-insensitive názov komponenty

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

Zdravím,
myslím, že ide o bug v novom vytváraní komponent. Volanie getComponent síce funguje bez ohľadu na veľkosti písmen, no vždy pri volaní s inými veľkosťami písmen vytvorí tú istú komponentu znova. Môže sa tak stať, že jedna komponenta sa vytvorí viac krát (čo sa mi dnes stalo a asi pol hodinu som hľadal chybu :-)).

// toto vytvorí tú istú komponentu tri krát
$this->getComponent("loginForm");
$this->getComponent("LoginForm");
$this->getComponent("loginform");
David Grudl
Nette Core | 8227
+
0
-

Buď lze udělat ověření metody v Control::createComponent() case-sensitive, nicméně stále by nebyl rozdíl mezi loginForm a LoginForm. Leda, že by akceptoval pouze první variantu.

Nebo udělat názvy komponent v celém Nette case-insensitive. Což by mohlo způsobit BC break.

Nechávám to k diskusi.

washo
Člen | 88
+
0
-

David Grudl napsal(a):

Buď lze udělat ověření metody v Control::createComponent() case-sensitive, nicméně stále by nebyl rozdíl mezi loginForm a LoginForm. Leda, že by akceptoval pouze první variantu.

Nebo udělat názvy komponent v celém Nette case-insensitive. Což by mohlo způsobit BC break.

Nechávám to k diskusi.

Ja myslel ze jsou case sensitive? Proc by nemely byt?

romansklenar
Člen | 655
+
0
-

Jejda raději to nechat tak jak to je :D …už vidím ty dotazy lidí co nečtou changelog

Ondřej Mirtes
Člen | 1536
+
0
-

washo napsal(a):

David Grudl napsal(a):

Buď lze udělat ověření metody v Control::createComponent() case-sensitive, nicméně stále by nebyl rozdíl mezi loginForm a LoginForm. Leda, že by akceptoval pouze první variantu.

Nebo udělat názvy komponent v celém Nette case-insensitive. Což by mohlo způsobit BC break.

Nechávám to k diskusi.

Ja myslel ze jsou case sensitive? Proc by nemely byt?

Funkce/mMetody v PHP jsou case-insensitive, můžeš psát Header(), Str_Repeat(), apod.

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):
Nebo udělat názvy komponent v celém Nette case-insensitive. Což by mohlo způsobit BC break.

Zas kdo vyrábí loginForm a LoginForm a myslí tím něco jiného? Abych se přiznal, tak jsem myslel, že to je case insensitive. Odteď tedy na to budu dávat větší pozor.

David Grudl
Nette Core | 8227
+
0
-

Jde o to, že je to sice je case-sensitive, tedy $presenter['loginForm'] a $presenter['LoginForm'] je něco jiného, ale pokaždé to (zatím) zavolá stejnou továrničku, takže případná chyba se špatně odhaluje. V tom je problém.

romansklenar
Člen | 655
+
0
-

Aha, tak v tom případě beru zpět a asi by měla být i továrnička case-sensitive ať je to jednotné.

Petr Motejlek
Člen | 293
+
0
-

Myslím, že by to mělo být case-sensitive na všechno kromě prvního písmena (díky názvu továrničky createComponentNazevKomponenty (tohle MUSÍ být spuštěno jak pro nazevKomponenty, tak pro NazevKompoenty, ale NESMÍ být spuštěno pro nazevkomponenty).

David Grudl
Nette Core | 8227
+
0
-

Jenže to není dokonalé řešení – stále je tu problém s prvním písmenkem. Takže by se muselo zakázat první velké písmeno, přesněji řečeno NazevKompoenty by nevolal továrničku.

Petr Motejlek
Člen | 293
+
0
-

David Grudl napsal(a):

Jenže to není dokonalé řešení – stále je tu problém s prvním písmenkem. Takže by se muselo zakázat první velké písmeno, přesněji řečeno NazevKompoenty by nevolal továrničku.

Tím jsem měl na mysli udělat to tak, aby např. se interně volání $this[‚nazevKomponenty‘] a $this[‚NazevKomponenty‘] vždy převedlo na $this[‚NazevKomponenty‘] (případně s malým písmenem n na začátku) – to v offsetGet($index) udělat můžeš. Pak by se vždycky zavolala stejná továrnička aj to pole by vracelo správnou hodnotu pro oba indexy.

Nebo poslední a hnusná možnost – vyjímka při použití prvního velkého písmena v názvu komponenty ;) – stejně si myslím, že best practice je použití prvního malého písmena, to velké až moc připomíná Packal ;).

David Grudl
Nette Core | 8227
+
0
-

Tohle je ale napováženou – není pak lepší regulérní case-insensitive?

buff
Člen | 63
+
0
-

David Grudl napsal(a):

Tohle je ale napováženou – není pak lepší regulérní case-insensitive?

Mám do toho asi houby co mluvit, ale mně by se líbilo case sensitive s vynucováním prvního písmene malého (ne ostře, jen nějaký warning a zavolat stejnou továrničku).

David Grudl
Nette Core | 8227
+
0
-

Od rev. 449 se továrnička volá case-sensitive, první písmenko musí být malé.

Petr Motejlek
Člen | 293
+
0
-

David Grudl napsal(a):

Od rev. 449 se továrnička volá case-sensitive, první písmenko musí být malé.

Asi jsem se zamiloval ;). Super.

PetrP
Člen | 587
+
0
-

David Grudl napsal(a):

Od rev. 449 se továrnička volá case-sensitive, první písmenko musí být malé.

Nevím no, skutečně při $presenter['loginForm'] a $presenter['loginform'] myslím 2 různé komponenty? Měla by vůbec nastat situace kdy bych 2 různé komponenty rozlišoval jen velikosti písmen?

Cifro
Člen | 245
+
0
-

David Grudl napsal(a):

Od rev. 449 se továrnička volá case-sensitive, první písmenko musí být malé.

Pôvodne som mal createComponentSlider a {control Slider}, podľa toho som zmenil na createComponentslider a {control slider}, vypísalo že komponenta neexistuje.

Takže správne pri jednoslovných názvoch musí, byť createComponentNazov a {control nazov} a $presenter['nazov'].

To pre ostatných.

Inak pekný chaos s týmto vznikol, chvíľu som sa šprtal kým som prišiel na to, že kde čo treba veľkým alebo malým.

Editoval Cifro (22. 7. 2009 10:23)

Petr Motejlek
Člen | 293
+
0
-

PetrP napsal(a):

David Grudl napsal(a):

Od rev. 449 se továrnička volá case-sensitive, první písmenko musí být malé.

Nevím no, skutečně při $presenter['loginForm'] a $presenter['loginform'] myslím 2 různé komponenty? Měla by vůbec nastat situace kdy bych 2 různé komponenty rozlišoval jen velikosti písmen?

Asi nenastane, ale právě pro to by jsi hned od začátku měl být case-sensitive ;).