Nette\ComponentContainer
Rodičovské komponenty kromě rozhraní Nette\IComponent
implementují i Nette\IComponentContainer, které obsahuje metody
pro přidání, odebrání, získání a iteraci nad komponentami. Celý strom
komponent je tedy tvořen větvemi v podobě objektů
Nette\IComponentContainer a listů Nette\IComponent.
Připravenou implementací jsou pak třídy Nette\Component a
Nette\ComponentContainer.
Iterování nad dětmi
K iterování slouží metoda getComponents($deep = FALSE, $type =
NULL). První parametr určuje, zda se mají komponenty procházet do
hloubky (neboli rekurzivně). S hodnotou TRUE tedy nejen projde všechny
komponenty, jichž je rodič, ale také potomky svých potomků atd. Druhý
parametr slouží jako volitelný filtr podle tříd nebo rozhraní.
Pro příklad použití využiju formuláře. Takto nějak se provádí kupříkladu ověření validace prvků:
$valid = TRUE;
foreach ($form->getComponents(TRUE, 'Nette\Forms\IFormControl') as $control) {
if (!$control->getRules()->validate()) {
$valid = FALSE;
break;
}
}
Viz také:
