RFC – sjednotit hodnotu $basePath v Nette/Latte

m.brecher
Generous Backer | 871
+
+1
-

Ahoj,

před 3 lety se diskutoval problém, že UrlScript::getBasePath() vrací $basePath s přidaným lomítkem, zatímco v Latte je $basePath v šablonách bez koncového lomítka. Rozdíl je dán historickými důvody jak je popsáno zde:

https://forum.nette.org/…jina-hodnota#…

Mrknul jsem se, zda opravou $basePath nevzniknou nějaké interní problémy v Nette a myslím, že to lze vyřešit jednoduše bez rizika, že se v Nette něco pokazí. Systémová proměnná $basePath se vytváří v balíčku nette/http v třídě UrlScript, kde se vytváří včetně koncového lomítka. Následně je $basePath využíváno pro interní zpracování v několika třídách, aby se v třídách TemplateFactory a MicroPresenter injektovala tato hodnota do šablon, kde je veřejně přístupná bez lomítka. Při injektování se totiž nežádoucí koncové lomítko odstraní rtrim().

Oprava spočívá v odstranění koncového lomítka ve třídě UrlScript, explicitním doplnění koncového lomítka všude tam, kde se interně používá $basePath z metody UrlScript::getBasePath() a odstranění odmazání koncového lomítka při injektování do šablon. Tímto postupem vyloučímě změnu při interním použití $basePath a $basePath nyní všude znamená hodnotu bez koncového lomítka.

Pro ty, kdo používají UrlScript::getBasePath() je to BC break, což je nepříjemné. Proměnná $basePath v šablonách zůstává beze změny. Myslím, že horší než BC break je matoucí koncové lomítko dodávané metodou UrlScript::getBasePath(). Pokud bychom chybu nechali jak je, mělo by se to výslovně zmínit v dokumentaci, jenže to by zase dost blbě vypadalo.

Podané PR:

https://github.com/…ting/pull/18
https://github.com/…ttp/pull/242
https://github.com/…ion/pull/341

Jaký je názor komunity? Odstranit chybu, nebo ji tam nechat?