Nette3 Utils migrace – vynucení správného prostředí
- Pavel Kravčík
- Člen | 1194
Ahoj,
je to spíš OT filosofického rázu, ale třeba to někomu pomůže nebo bude mít někdo lepší nápad. Máme některé projekty „závislé“ na správnosti „webalize“. Například online excel konvertor. České názvy sloupců se převedou na unikátní anglické (pomocí webalize) a pak se na ně aplikují nějaká pravidla. Použiju zjednodušený kód:
foreach($columList as $columnName => $columnValue)
{
if($columnName == 'nas-produkt')
{
$value = $columnValue. ' + sleva 10%';
}
}
Bohužel se může stát následující:
//bez php7_intl.dll
\Nette\Utils\Strings::webalize('náš produkt'); //n-produkt
//s php7_intl.dll
\Nette\Utils\Strings::webalize('náš produkt'); //nas-produkt
Výstup z composeru na to upozorní, ale prošlo nám až na ostrou aniž by to někdo zaznamenal, pokud někdo má obsáhlejší výstup composeru (hodně skriptů apod.), tak se to snadno přehlédne. Každopádně to je naše chyba a ne Nette, aby tady nebyly nějaké jízlivé poznámky.
//composer update output:
Package operations: 1 install, 0 updates, 0 removals
- Installing nette/utils (v3.0.3): Loading from cache
nette/utils suggests installing ext-intl (to use Strings::webalize(), toAscii(), normalize() and compare())
Otázka je tedy následující, jak byste to řešili vy?
- Do projektu, kde je to důležité přidat check
extension_loaded()
a vyhazovat výjimku už při skládání DI třeba - Fork nebo PR do Nette\Utils a přidat exception do konkrétních funkcí, že nemusí fungovat správně
- Použít něco jiného nebo sepsat nějaký regex
- Napsat někam na fórum, kde jsou chytřejší lidi a třeba někoho v OT něco napadne :)
- David Grudl
- Nette Core | 8218
Mám připravený commit ‚Strings::toAscii – triggers E_USER_NOTICE when ext-intl is not present‘, ale musím s tím počkat do další trošku větší verze, váhám mezi 3.2 a 4.0