Dynamický formulář – zpracování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MikeLacroix
Člen | 60
+
0
-

Zdravím, nastíním svůj problém:

Šablona
Po kliknutí na odkaz se vygeneruje dynamický formulář a pomocí ajaxu se zobrazí na stránce.

<div n:foreach="$products as $product">
	...
	<a n:href="displayCartForm! $product->id" class="ajax">Vložit do košíku</a>
</div>

{snippet cartForm}
	<div n:ifset="$openModal">
		...
		{control cartForm}
		...
	</div>
{/snippet}

Presenter

...
private $product;
...
public function handleDisplayCartForm(int $product) {
	$this->product = $this->products->getById($product);
	$this->template->openModal = true;
	$this->redrawControl('cartForm');
}

protected function createComponentCartForm() {
	return $this->cartFormFactory->create($this->product);
}

CartFormFactory

...
public function create(Product $product) {
	...
	foreach ($product->parameters as $parameter) {
		$form->addRadioList($parameter->id, $parameter->name, $parameter->variants);
	}
    ...
}

Tohle funguje obstojně a formulář se správně vygeneruje. Problém je při zpracování formuláře. Jednoduše nevím, jak při zpracovávání formuláře zjistit, pro který produkt by se měl formulář vytvářet.

Obecně mi přijde, že na to nejdu moc čistě. Budu vděčný za jakoukoliv radu…

CZechBoY
Člen | 3608
+
+1
-

Udělej to přes Multiplier.

<div n:foreach="$products as $product">
    ...
	{control cartForm-$product->id}
</div>
protected function createComponentCartForm() {
	return new UI\Multiplier(function ($productID) {
		$product = $this->model->getProductById($productID);

	    return $this->cartFormFactory->create($product);
	});
}
MikeLacroix
Člen | 60
+
0
-

Paráda, to je přesně ono. Díky!