Nastavení defaultních hodnot do webchemistry/forms-multiplier

Proki
Člen | 66
+
0
-

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
+
0
-
<?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
+
0
-

@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
+
0
-

@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(..);
}