nefunkční $form->setDefaults u addDynamic
- Hankill
- Člen | 9
Ahoj,
mám vytvořený následující formulář pomocí addDynamic od HosipLan ale nedaří se mi do něj načíst hodnoty z databáze. Zkoušel jsem ledacos ale pořád ne a ne to jet. Mohu poprosit prosím o pomoc?
protected function createComponentPollForm() {
$presenter = $this;
$poll = $this->getElementByPart( $this->idPart );
$answers = $this->partModel->getAnswersById( $poll['idPoll'] );
// $answers obsahuje pole = array( 0 => array( 'idAnswer' => '1', 'answer' => 'a' ), 1 => array( 'idAnswer' => '2', 'answer' => 'b' ), 2 => array( 'idAnswer' => '3', 'answer' => 'c' ))
$form = new Form;
$form->addText('question', 'Otázka:')
->setRequired('Vyplňte prosím otázku.');
$form->addHidden('boxType', 'poll');
$replicator = $form->addDynamic('answers', function (Container $container) use ($presenter) {
$container->addText( 'answer', 'Odpověď:' );
$container->addHidden( 'idAnswer' );
$container->addSubmit( 'remove', 'Smazat' )
->setValidationScope( FALSE )
->onClick[] = callback( $presenter, 'RemoveElementDynamically' );
}, count($answers));
$replicator->addSubmit( 'add', 'Přidat další odpověď' )
->setValidationScope( FALSE )
->onClick[] = callback( $this, 'AddElementDynamically' );
$form->setDefaults( array( 'question' => $poll['question'], 'answers' => $answers ) );
$form->addSubmit('save', 'Uložit')
->onClick[] = callback($this, 'pollFormSubmitted');
$form->addProtection('Odešlete prosím formulář znovu (bezpečnostní token vypršel).');
return $form;
}
Editoval Hankill (14. 10. 2011 20:40)
- Filip Procházka
- Moderator | 4668
Zkusil bych to takto předělat
public function actionDefault()
{
$this->poll = $this->getElementByPart($this->idPart);
if (!$this['pollForm']->isSubmitted()) {
$defaultAnswers = $this->partModel->getAnswersById($this->poll['idPoll']);
$answers = $this['pollForm']['answers'];
foreach ($defaultAnswers as $id => $answer) {
// automatické vytvoření kontejneru při "doteku"
$answers[$id]->setValues($answer);
}
$this['pollForm']['question']->setValue($this->poll['question']);
}
}
protected function createComponentPollForm()
{
$form = new Form;
$form->addText('question', 'Otázka:')
->setRequired('Vyplňte prosím otázku.');
$form->addHidden('boxType', 'poll');
$removeEvent = callback($this, 'RemoveElementDynamically');
$answers = $form->addDynamic('answers', function (Container $container) use ($removeEvent) {
$container->addText('answer', 'Odpověď:');
$container->addHidden('idAnswer');
$container->addSubmit('remove', 'Smazat')
->setValidationScope(FALSE)
->onClick[] = $removeEvent;
});
$answers->addSubmit('add', 'Přidat další odpověď')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'AddElementDynamically');
$form->addSubmit('save', 'Uložit')
->onClick[] = callback($this, 'pollFormSubmitted');
$form->addProtection('Odešlete prosím formulář znovu (bezpečnostní token vypršel).');
return $form;
}
Editoval HosipLan (15. 10. 2011 10:27)
- kycera
- Člen | 7
Mám problém používám používám stejný způsob nastavení defaultních hodnot jak prezentuje HosipLan, ale i když některou z defaultně vypsaných změním tak po odeslání formuláře se nezmění (zůstanou stejné jako nastavený default). Jal lze teda nastavit default aby se změna propagovala do výsledků formuláře? Díky.
- kycera
- Člen | 7
plnění formuláře daty:
<?php
$specs = $this['taskForm']['specification'];
foreach ($this->model->findSpecificationsFac($this->id) as $id => $spec) {
$specs[$id]->setValues($spec);
}
?>
addDynamic v továrničce:
<?php
$replicator = $form->addDynamic('specification', function (Container $container) use ($presenter) {
$container->addText('name', 'Název oboru:', 100, 100);
$container->addText('info', 'Informace o oboru:' , 100, 200);
}, 1);
$replicator->addSubmit('add_spec', 'Přidat obor')
->setValidationScope(false)
->onClick[] = callback($this, 'MyFormAddElementClicked');
?>
Při odeslání formuláře data zůstanou stejná jako defaultní ikdyž došlo k jejich změně..
- Filip Procházka
- Moderator | 4668
A máš to plnění hodnot obalené v
if ( ! $this['taskForm']->isSubmitted()) {
? Protože jestli ne, tak se ti ty hodnoty přepíšou,
setValues
není setDefaults
.
Editoval HosipLan (29. 8. 2012 20:02)