Kam v Nette ukládat konstanty?
- Filip Procházka
- Moderator | 4668
Ale kdepak, prostě je dáš do odpovídající třídy. Globální konstanty jsou hloupost.
- MartinitCZ
- Člen | 580
$this->context->parameters["facebook"]["appId"];
$this->context->parameters["facebook"]["secret"];
- raketoplan2005
- Člen | 147
V presenteru vytvářím komponentu, ve které používám objekt formuláře. Ten se skládá z menších komponent a o tom, které se použijí se rozhoduje podle proměnné v presenteru. V objektu formuláře mám tedy switch na tu proměnnou.
Chtěl bych na to použít konstanty. Ty samé ale potřebuji i ve zpracování formuláře. Kam je mám umístit?
Když je dám do třídy toho formuláře tak pak volám v presenteru při
zpracování formuláře \MujForm\Konstanty::KONSTANTA
a to je asi
špatně, ne?
- raketoplan2005
- Člen | 147
V presenteru vytvářím komponentu pomocí createComponent
. Do
třídy MyForm si předávám parametr, podle kterého skládám kontejnery do
formu. Podle toho se odvíjí i zpracování formu.
protected function createComponentMyForm() {
$form = new \MyForm($this->presenter->getParameter('phase'));
$form->addSubmit('submit', 'OK')
->onClick[] = callback($this, 'myFormProcess');
return $form;
}
protected function myFormProcess(\Nette\Forms\Controls\SubmitButton $button) {
$form = $button->getForm();
$values = $form->getValues();
if($this->presenter->getParameter('phase') === \MyForm::FIRST){
// jde mi o to, zda je tady to pouziti \MyForm::FIRST v poradku
}
}
Editoval raketoplan2005 (30. 3. 2013 23:37)
- Šaman
- Člen | 2666
Vypadá to, že se ta konstanta skutečně váže k tomu konkrétnímu
formuláři, takže umístěná je dobře.
Možná by šlo psát i $form::FIRST
. To, že k ni přistupuješ
v presenteru nevadí, protože ta metoda obstarává obsluhu tohoto
konkrétního formuláře, k té závislosti se hlásí přes parametr $button,
takže to není žádná magie.
Jiná otázka je, zda by se ten formulář neobešel bez té konstanty a nebylo by lepší řešit to jinak. To ale těžko říct, když neznáme celý kontext.