Převod normální Nette verze na verzi prefixovanou
- pave.kucera
- Člen | 122
Existuje na převod normální verze Nette do prefixované podoby nějaký nástroj? Snažím se použít DataGrid na mém webu, který ale jede na prefixovaném Nette, takže to samozřejmě nefunguje a kdyby šlo upravit zdroják DataGridu automaticky, bylo by to mnohem jednodušší, než přidávat k Nette třídám ,,N" :-).
- Tomik
- Nette Evangelist | 485
Pokud se nemýlím, tak tento DataGrid nepoužívá prefixed verzi – alespoň ta verze ze SVN – http://code.google.com/…te-datagrid/ (https://componette.org/search/?…).
- pave.kucera
- Člen | 122
Právě, nepoužívá a tam je zakopaný pes. Potřeboval bych ho upravit pro použití s prefixed verzí a ruční úpravy kódu se docela bojím.
- pave.kucera
- Člen | 122
Takže žádný nástroj, který by zvládl přepsat názvy Nette tříd na prefixovanou verzi, neexistuje? :( Tak hurá do práce…
- romansklenar
- Člen | 655
Spíš bych zvolil druhou cestu (pokud to půjde):
compatibility.php
class Component extends NConponent {}
class Html extends NHtml {}
class Form extends NForm {}
// a tak dále ...
- Ondřej Mirtes
- Člen | 1536
romansklenar napsal(a):
Spíš bych zvolil druhou cestu (pokud to půjde):
compatibility.php
class Component extends NConponent {} class Html extends NHtml {} class Form extends NForm {} // a tak dále ...
Dobrý nápad, ale vůbec to nebere v úvahu, proč prefixed verze Nette vznikla. Vždyť u třídy, jejíž název v daném prostředí už existuje (a není z Nette) to zařve, že ji nelze deklarovat znova.
Nebo jak jsi to myslel?
- romansklenar
- Člen | 655
To je právě to, co si musí ošéfovat (proto to „pokud to půjde“). Pokud je důvod proč používá prefixed verzi jen tento, tak to imho bez problémů půjde.
- Ondřej Mirtes
- Člen | 1536
Ty jo, ale bylo by to potřeba v PHP 5.2, v PHP 5.3 už můžu použít namespaces :o)
- Honza Kuchař
- Člen | 1662
Z komentářů na php.net :) (pro PHP 5.2)
<?php
if (!function_exists('class_alias')) {
function class_alias($original, $alias) {
eval('abstract class ' . $alias . ' extends ' . $original . ' {}');
}
}
?>
- Ondřej Mirtes
- Člen | 1536
Komentář jsem přečetl a něco takového dělám ručně, ale nemůže to fungovat právě pro ty final třídy :)
- David Grudl
- Nette Core | 8228
Je fakt, že existence tří verzí je nepříjemnost komplikující život, hodilo by se šikovné řešení, ale žádné jiné než funkci class_alias neznám. Pokud použijete tento trik:
class Component extends NComponent {}
class Form extends NForm {}
Tak to může vést k těžko odhalitelným chybám:
$form = new Form; // formulář je komponenta, nicméně
echo $form instanceof Component // -> vrací FALSE!