import třídy i s namespace v šabloně

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
theo
Člen | 57
+
0
-

Narazil jsem na problém spočívající v tom, že uvnitř šablony potřebuju použít určitou třídu, ale protože pracuju v PHP 5.3 tak používám namespace, takže to danou třídu nenajde (leda že ji napíšu včetně namespace), což je ale hrozně dlouhé.
Příklad (v šabloně):

<?php
{if $employee->isAllowedTo(Models\IdentityModels\PermissionModel::READ, Models\IdentityModels\PermissionModel::EMPLOYEE)}
?>

Lze to řešit nějak elegantně? Pokus o use Models\IdentityModels\PermissionModel; na začátku šablony pochopitelně neprojde, protože už se před tím vykoná inicializace té šablony, takže use už se na to místě prostě použít nedá :/

ic
Člen | 430
+
0
-

taky jsem teď na tohle narazil… chtěl jsem něco jako

{if String::endsWith($time, '00:00')}...

a bohužel… tohle je jediné <?php ... ?> které take v šabloně musím mít… nejde to nějak lépe?

Majkl578
Moderator | 1364
+
0
-

Otázka je, jestli je správně, že šablona na PHP kód vůbec šahá, IMHO by neměla.
Jinak možnost použít use (zatím) neexistuje.

ic
Člen | 430
+
0
-

Tak jsou tam různé helpery, které se hodí a teď by se mi hodil helper co dělá to samé jako String::endsWith a určitě bude spousta specifických požadavků na které zatím helpery nejsou. Mohl bych si ho dopsat, to jasné, ale použití <?php ... a zápis i s namespace je rychlejší. A i když bych ho dopsal nemyslím že by se to mohlo někomu dalšímu ještě hodit… chtělo by to nějaké univerzálnější řešení, něco jako ‚custom helper‘

Filip Procházka
Moderator | 4668
+
0
-

udělej si vlastní makro, něco jako

// nějak takhle :)
LatteMacros::$defaultMacros['ifAllowedTo'] = '<?php echo MyMacros::isAllowedTo(%%, %%); ?>';
{ifAllowedTo $resource, $action}
{/if} {* tohle makro už vytvářet nemusíš :) *}
use Models\IdentityModels\PermissionModel;

MyMacros::isAllowedTo($resource, $action = NULL) {
	return Environment::getUser()->isAllowedTo(constant('PermissionModel::'.$resource), constant('PermissionModel::'.$action));
}

je to víceméně pseudokód, doladit si to musíš sám :)