Problém s Formulářema & callback, Wedos
- petas.ck
- Člen | 12
Dobrý večer,
narazil jsem na problém, se kterým si nevím rady. Jedná se o problém po uploadu na Wedos (verze php: kombinace 5.3 a 5.4, verze nette: 2.0.10), na localhostu vše funguje, jak má. Používám Replikátor, kde vypisuji jednotlivá tlačítka + edity, apod. Je tedy možné formulář odeslat více tlačítky.
$form = new UI\Form();
$form->addDynamic('material', function (Container $material) {
$material->addHidden('materialID');
$material->addText('materialName')->setDisabled();
$material->addTextArea('materialCaption', 4, 15)->setDisabled();
$material->addText('materialQuantity', 5)->setDefaultValue(1)
->addRule(UI\Form::INTEGER, 'Počet kusů musí být číslo');
$material->addText('materialCoins')->setDisabled();
$material->addSubmit('materialBuy', 'Koupit')
->onClick[] = callback($this, 'buyMaterialSuccess');
}, $this->material);
return $form;
Ve funkci po odeslání poté kontroluji rodičovské komponenty.
public function buyMaterialSuccess(\Nette\Forms\Controls\SubmitButton $button)
{
if($button->form->isSuccess())
{
$materialID = $button->parent->components['materialID']->value;
...
Problém nastává ve chvíli, kdy se presenter načte a to v řádku:
$material->addSubmit('materialBuy', 'Koupit')
->onClick[] = callback($this, 'buyMaterialSuccess');
Laděnka mi hlásí toho: Undefined variable: this
U předchozích formulářů pomohlo toto(ikdyž mi to příjde trochu nelogické, ale asi pokud neuvedu třídu, je odeslána automaticky – každopádně to fungovalo(je)):
$material->addSubmit('materialBuy', 'Koupit')
->onClick[] = callback('buyMaterialSuccess');
Bohužel, pokud tento krok provedu i u tohoto, vyhodí mi to chybu:
Callback ‚buyMaterialSuccess‘ is not callable
Zkoušel jsem udělat i callback „postaru“, tedy jako v čistém php použít statickou metodu a pole. To sice prošlo, ale pro mě je to dost nešťastné, protože daná funkce není opravdu navržena jako statická.
Připomínám, že na localhostu tento problém nemám, tam vše běží, jak má. Nevíte někdo, v čem by mohl být problém?
Děkuji za odpovědi i čas
Petr
- Jiří Nápravník
- Člen | 710
problém ej nejspíše v tom jak píše Majkl. Či-li budˇPHP 5.4 nebo workaround
$that = $this;
$form->addDynamic('material', function (Container $material) use ($that) {
//a tady misto $this psát $that