-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
nenormalizovat jména tříd na malá písmena #63
Comments
Já tomu nerozumím. RepositoryHelper::normalizeRepository nevrací název žádné třídy. Jak může string který se vytváří z jména třídy repository a používá se jako defaultní název tabulky nějak souviset z načítáním tříd? Kdyby jsi podle tohodle stringu snažil se načíst třídu tak dříve než na problém z velikostí písmen tak naraziš na to že to z repository class name, odstranuje z konce slovo repository. |
Aha tak se jedná o to že se z tohodle jména háda defaultní entity name. PHP třídy jsou case insensitive a používat autoloader který to nerespektuje, je hlavně bug toho autoloadu. A ano podobný "problém" je na více místech.
Aby to všechno fungovalo caseinsensitivně by bylo o dost komplikovanější a pomalejší. Ale rozhodně ti nedoporučuju používat case sensitiivní class loader na case insensitivní php třídy. |
Teď když jsem si dal kafe, osprchoval se a trochu více se probudil. :-) Tak uznávám že to je problém, který bych měl řešit. Realita je taková že tyhle class loadery se takhle debilně chovají a já s tím musím fungovat, protože jsou lidi kteří je používají. (Ale doporučuju začít používat Nette\Loaders\RobotLoader.) |
Btw. díky za bug report. :-) |
ad "PHP třídy jsou case insensitive a používat autoloader který to nerespektuje, je hlavně bug toho autoloadu." - by mě opravdu zajímalo, jak by to měl řešit PSR-0 autoloader na case sensitive filesystému? zkoušet všechny kombinace malých a velkých písmen? :] to že jsou třídy case insensitive je především chyba v návrhu PHP. možná bych to měl reportovat jako bug : P fix: Clevis@d6feb27 (ještě to musím prověřit v reálu a nejspíš to nepokrývá všechny oblasti co jsi vypsal) Nette RobotLoader by to řešil, ale problém při použití PSR-0 zůstává a konfigurace jiného loaderu při načítání Composerem je zbytečná práce navíc a při opomenutí zbytečná WTF. chce to odstranit příčinu |
@paranoiq BTW: PSR-0 nedoporučuje ani Composer. Kvůli rychlosti stejně doporučují vygenerovat classmapu = to, co dělá RobotLoader. |
@PetrP na základní aplikaci s jednou Entitou, Repository a Mapperem to funguje. ještě to musím ověřit na něčem větším, kde jsou vazby atd. je možné že bude problém s těmi anotacemi. testy samozřejmě prochází |
další problém nejspíš bude v RelationshipMetaData::checkIntegrity(). pokusím se to vyřešit UPDATE: kontrola integrity funguje tak jak je. není třeba to upravovat. otestoval jsem to i s relacemi a zatím jsem na žádnou chybu nenarazil |
@JanTvrdik teď jsem zjistil, že i classmap v Composeru je case-sensitive |
Rád bych znovu oživil toto téma. Nette 2.3.0-RC2 má commit nette/di@63bda59 který z původního DI getteru dělá case sensitivní, takže normalizování tříd na lowercase nebude fungovat. |
Tohle je pořád problém, RobotLoader je už taky case-sensitive. |
metoda RepositoryHelper::normalizeRepository() překládá jména tříd na malá písmena. to způsobuje, že:
ORM nemůže na operačních systémech s case sensitive filesystémem načíst třídy repozitářů/entit atp. pokud autoloader používá PSR-0 (přímé mapování namespaců na adresáře). to z principu nelze řešit jinak, než že ORM bude vyžadovat správné jméno třídy včetně velikosti znaků
vzhledem, že Composer zamítl bug Case insensitive classmap composer/composer#1803 (čemuž se nelze divit. bylo by hloupé, kdyby se classmap autoloader choval jinak než PSR-0 autoloader), nelze vůbec načíst jakékoliv repository/entity nainstalované Composerem
nevím jestli podobná normalizace není ještě někde
The text was updated successfully, but these errors were encountered: