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.