Jak ručně renderovat formulář s konteinery
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- murdej
- Člen | 26
Ahoj, zkouším ručně renderovat formulář s konteinery (2 úrovně) ale
nějak se mi to nedaří
Formulář vytvářím takto:
$form = new App\DefaultForm();
$cFields = $form->addContainer('fields');
foreach($this->form->fields as $field) {
$cField = $cFields->addContainer('f'.$field->id);
$cField->addText('position', 'Pozice');
$cField->addText('type', 'Typ');
$cField->addText('param', 'Parametr');
}
Latte šablona vypadá takto
{form formForm}
{formContainer fields}
<div n:foreach="$form->controls as $name => $field">
{formContainer $name}
{input position}
{input type}
{input param}
{/formContainer}
</div>
{/formContainer}
{/form}
Problém je v tom že makro input nemůže najít prvek ve vnořeném konteineru. Hlásí chybu
Component with name ‚position‘ does not exist.
Nejaký nápad?
- Jan Tvrdík
- Nette guru | 2595
@murdej: Metoda getControls()
kterou
voláš funguje jinak, než očekáváš. Vrací všechny instance
Nette\Forms\IControl
rekurzivně. Viz https://github.com/…ontainer.php#L220.
Proiteruj radši $form->components
.