Nastavení defaultních hodnot do webchemistry/forms-multiplier
- Proki
- Člen | 66
Ahoj,
používám webchemistry/forms-multiplier a chtěl bych mít i editační formulář udělaný stejným principem, jak pro nové záznamy, respektive mám jeden form jak klasické formuláře a v akci pro editaci nastavuji existující hodnoty metodou setDefaults.
Problém je, že Multiplier tyto defaultní hodnoty vůbec nebere v potaz a navíc vytvoří pouze jeden kontejner, nikoliv určitý počet dle počtu položek, které předávám do setDefaults. Nemáte někdo podobný problém? Případně jak nastavujete výchozí hodnoty do Multiplieru?
Díky
- Mart78
- Člen | 31
<?php
namespace App\Presenters;
use Nette;
use Nette\Application\UI\Form;
class TestPresenter extends BasePresenter
{
protected $multiplierValues = [];
public function actionEdit($id)
{
// some code
$this->multiplierValues = [
[
'name' => 'prvni',
'number' => 123,
],
[
'name' => 'druhy',
'number' => 456,
],
];
$this['testForm']->setDefaults($formValues);
$this->setView('add');
}
public function createComponentTestForm()
{
$form = new Form();
$form->addText('someInput');
$form->addText('someInput2');
$myMultiplier = $form->addMultiplier('multipleItems', function(Nette\Forms\Container $container, Form $form){
$container->addText('name');
$container->addInteger('number');
}, 0); // 0 means there is no row rendered when no values are set
$myMultiplier->addCreateButton('Přidat');
$myMultiplier->addRemoveButton('Smazat');
$myMultiplier->setValues($this->multiplierValues); // here you set default values for multiplier, it will automaticly render two rows with your values
$form->addSubmit('save');
//$form->onSuccess[] = [$this, 'couponFormSucceeded'];
return $form;
}
}
- marten_cz
- Člen | 10
@Mart78 Co s tim, kdyz ale chci setDefaults() nebo i setValues() pouzit v action? Ze zahadneho duvodu mi to tam nefunguje. V create component je vse v poradku. Pritom ostation component jsou v tomhle ohledu bez problemu, pouze tady je to nerealne. Dle xdebugu se setValue zavola a dokonce i nastavi, jen data jsou pak prazdna.
- Mart78
- Člen | 31
@marten_cz Na starším projektu mi to takto funguje, na novém už
ale ne. Hodnoty je potřeba nastavit ještě před vygenerováním komponenty
formuláře. Viz. https://github.com/…ier/issues/5
Jen pozor pokud v action metodě nastavuješ hodnoty i ostatním prvkům
formuláře, musíš první nastavit hodnotu pro multiplier.
public function actionEdit()
{
$this->formFactory->setMultiplierValues($values);
$this['form']->setDefaults(..);
}