Dostupná proměnná odkudkoliv
- jedlicka
- Člen | 70
Ahoj,
měl bych dotaz, zda je možné toto:
Potřeboval bych, aby ve všech presenterech a ve všech šablonách byla
dostupná nějaká proměnná, podle které se rozhoduji (třeba nějaké pole).
Podobně jako je třeba role, ke které mohu přistupovat odkudkoliv
(v šabloně $role=$user->getRoles()
, v presenteru
$role = $this->user->getRoles()
), tak stejně bych chtěl
přistupovat k vlastní proměnné, která se při startu nainicializuje
(kde?).
Pokud to lze, tak jak?
Díky moc.
Martin
- her-ur
- Člen | 20
Ahoj, můžeš si v konfigu zaregistrovat vlastní TemplateFactory a nastavit to v ní:
latte.templateFactory:
create: Custom\TemplateFactory
Ta vlastní TemplateFactory může dědit od
Nette\Bridges\ApplicationLatte\TemplateFactory
a v ní můžeš
přetížit metodu createTemplate
. Lepší by bylo použít
kompozici. Tzn. že by ta tvoje vlastní třída dostala v konstrukturu
Nette\Bridges\ApplicationLatte\TemplateFactory
a tu využila, ale
to nevím, jestli je možné udělat a pokud ano, tak by mě to samotného
zajímalo :-)
- chemix
- Nette Core | 1310
Ahoj,
ja tohle treba pro verzi resim v BasePresenteru. Předka vsech mych
dalsich presenteru. Pripadne to lze resit i pres Traitu, kterou pridas
ke vsem presenterum. Ukazka jak tam dat snadno promenou verzi, nebo imho lepsi
reseni si injectnout nejakou pomocnou servisu, ktera ty data uz bude mit nejak
nactene v sobe. Je to takove reseni, ktere uz neni moc doporucovane, ale me
zatim funguje :-)
abstract class BasePresenter extends Presenter
{
/** @var MyConfigurationService @inject */
public $configuration;
/* nebo */
public $version = '1.0.0';
protected function beforeRender()
{
parent::beforeRender();
$this->template->version = $this->configuration->version;
// nebo
$this->template->version = $this->version;
}
}
- Ondřej Kubíček
- Člen | 494
samozřejmě, pokud máš nějakého společného předka pro presentery –
BasePresenter
, tak můžeš přetížit
beforeRender
metodu
protected function beforeRender()
{
parent::beforeRender();
$this->template->nazevPromenne = 'ahoj';
}
teď budeš mít tu proměnou nazevPromenne
dostupnou všude
- Martk
- Člen | 661
@her-ur myslím, že šlo, jen musíš vypnout autowiring
latte.templateFactory:
autowiring: no
a už jen zaregistrovat vlastní službu a předat výchozí službu
templateFactory:
class: Nette\Application\UI\ITemplateFactory
create: TemplateFactory(@latte.templateFactory)
Editoval Martk (18. 9. 2018 10:04)