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