Replikator se select boxem
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Nich
- Člen | 49
Ahoj, mám problém s předáním nachystaného pole pro select do
dynamického kontejneru.
Formulář vypadá takto:
$form = new Nette\Application\UI\Form;
$added = $this->demoParams->findAll()->where('demos_id', $this->demoId);
$paraArray = array();
$dependArray = array();
foreach ($added as $para) {
$paraArray[$para->id] = $para->name;
$vals = $this->paramValues->findAll()->where('parameters_id', $para->id);
foreach ($vals as $val) {
$dependArray[$para->name][$val->id] = $val->value;
}
}
$params = $form->addDynamic('params', function (Container $para) {
$para->addSelect('parameters_id', 'Parametr:', $paraArray);
$para->addSelect('parameter_values_id', 'Závislý na:', $dependArray);
$para->addSubmit('remove', '- smazat závislost -')
->setValidationScope(FALSE)
->addRemoveOnClick(); // metodu vytváří replicator
}, 0);
U prvního selectu mi to selže, protože dynamický kontejner nevidí předem nachystané pole. Error:
Undefined variable: paraArray
Zkusil sem tedy vytváření polí přesunout dovnitř dynamického kontejneru. Ale tam se mění objekt a kontext, takže Error:
Using $this when not in object context
Neporadí někdo jak to zprovoznit?
Editoval Nich (21. 4. 2013 15:40)
- Tomáš Votruba
- Moderator | 1114
Ahoj, zřejmě hledáš use
, přes které dostaneš proměnné
do anonymní fce, tedy:
$params = $form->addDynamic('params', function (Container $para) use ($paraArray, $dependArray) {
// ...
Tady máš jednoduché vysvětlení