Dynamický počet položek ve formuláři

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

Zdravím, forum jsem prohledal, ale nenašel jsem nic co potřebuji.

Mám dotaz, jak by se mělo udělat předávání parametru z presenteru do formu. Vysvětlím: mám formulář pro generování faktury, kde mám možnost nastavit počet položek. Při editaci faktury nastavím v actionEdit() do $this->params počet položek a ty pak získám ve formuláři. Funguje mi to, ale moc se mi nezdá moje řešení, takže se ptám tady, jestli někdo nedělal něco podobhéno.

Presenter

<?php
	protected function createComponentInvoiceForm()
	{
		$form = new Backend_InvoiceForm('invoiceForm');
		$form->onSubmit[] = array($this, '_formInvoiceSubmitted');

		return $form;
	}

	public function actionEdit($id)
	{
		$defaults->ItemCount = count($invoiceItems);
		...
		$this->params['ItemCount'] = $defaults->ItemCount;
		$this->getComponent('invoiceForm')->setDefaults((array)$defaults);
	}

	public function renderEdit()
	{
		$this->template->pageTitle   = dgettext(LOCALE_DOMAIN, 'Edit invoice');
		$this->template->invoiceForm = $this->getComponent('invoiceForm');
		$this->template->edit        = true;
	}
?>

Formulář:

<?php
final class Backend_InvoiceForm extends BaseForm
{
	const DEFAULT_ITEMS_COUNT = 1;

	public function __construct($name, $parent = null)
	{
		parent::__construct($parent, $name);

		...

		$count = Environment::getApplication()->getPresenter()->getParam('ItemCount');
		if (empty($count)) {
			$count = Environment::getHttpRequest()->getPost('ItemCount', self::DEFAULT_ITEMS_COUNT);
		}

		$this->addText('ItemCount', dgettext(LOCALE_DOMAIN, 'Count'), null, 2)
			->setValue($count);

		...

	}
?>