Config\Configurator – nekonzistentní užití konstant
- Majkl578
- Moderator | 1364
Config\Configurator má aktuálně 4 konstanty: DEVELOPMENT, PRODUCTION,
AUTO a NONE. To ovšem způsobuje zmatky kvůli jejich nešťastnému
pojmenování a použití.
Opakovaně jsem si všiml, že začátečníci používají tyto konstanty
domnívajíce se, že tak správně zapnou debug mód. Za jádro celého
problému považuji tento
řádek v bootstrapu sandboxu:
$configurator->setDebugMode($configurator::AUTO);
, ze kterého
se začátečník domnívá, že pro změnu módu se používají konstanty, a
tak sáhne po té nejvhodnější – DEVELOPMENT (tedy:
$configurator->setDebugMode($configurator::DEVELOPMENT);
). To
samozřejmě fungovat nebude, jelikož je to string a tak se použije
jako povolená IP pro debug mód. Výsledkem je zmatený začátečník a
nefunkční debug mód.
Celé je to ještě o to horší, že Configurator::AUTO se používá i ve
zcela jiném kontextu, a to u určení
sekce při načítání konfiguračního souboru (k čemuž je zjevně
z logického pohledu i původně určena).
- Ascaria
- Člen | 187
No jelikož je development a production pořád to samý, ať už jde o nastavení konfigurátoru, či debuggeru, navrhuju rozšířit detekční metodu:
/**
* Detects debug mode by IP address.
* @param string|array IP addresses or computer names whitelist detection
* @return bool
*/
public static function detectDebugMode($list = NULL)
{
$list = is_string($list) ? preg_split('#[,\s]+#', $list) : $list;
$list[] = '127.0.0.1';
$list[] = '::1';
return in_array(isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : php_uname('n'), $list, TRUE) || in_array(self::DEVELOPMENT, $list, true);
}
protože je podle mě logické, aby to fungovalo jednotně takto:
$configurator->setDebugMode($configurator::DEVELOPMENT);
// než takto, to nikomu nedojde
$configurator->setDebugMode(Nette\Diagnostics\Debugger::DEVELOPMENT);
Editoval Ascaria (29. 5. 2012 9:50)
- Majkl578
- Moderator | 1364
Původně mě napadlo ponechat setDebugMode akceptující boolean parametr (ruční nastavení) a pro automatickou detekci použít jinou metodu, např. detectDebugMode. Ty konstanty bych do toho každopádně vůbec netahal – to, co navrhuje Ascaria v #4, mi nepřijde o nic míň matoucí oproti současnosti.
- Ascaria
- Člen | 187
David Grudl napsal(a):
Co třeba změnit setDebugMode na enableDebugMode ?
V tom případě bych udělal něco jako
enableDebugMode()
enableProductionMode()
obojí by bylo bez argumentů a přenastavovalo jednu property. Bez zavolání metod, nebo přímo po zavolání
detectMode()
by se zjišťovalo automaticky, čili „reset“ prvních dvou metod.
Vím že pak bude v API o metodu navíc, ale pokud je jen setdebug nebo předtím jen setproduction, je to podle mě polovičatý.
edit:
Nebo jen přidat další metodu setMode(), která by nastavila jak debug tak
sekci configu, ale to je už přeplácaný a blbý asi. No nevim jak to
vymyslet.
Editoval Ascaria (30. 5. 2012 9:13)