zpracovani dat ve formulari (addHidden problem)
- adferg
- Člen | 31
Ahoj, resim takovou zapeklitost a nezbyva mi nez pozadat o radu :). Jde mi o toto: Vysledkem je, ze predlozim uzivateli otazku k tomu nabidnu tri mozne odpovedi formou radio listu. Toto se taha z databazeravne odpovedi. A ted k problemum:
Takhle vypada muj presenter.
protected function createComponentQuestionForm(): Form
{
$numOfQuestions = $this->questionsManager->getNumOfQuestions(); //zjisti, kolik otazek je v databazi
$randomNumber = $this->questionsManager->getRandomNumber($numOfQuestions); // vygeneruje nahodne cislo otazky
$questionAll = $this->questionsManager->getQuestion($randomNumber); // vezme z databaze zaznam s otazkou a odpovedmi
$answers = ['1' => $questionAll->answer1, '2' => $questionAll->answer2, '3' => $questionAll->answer3]; //pole s odpovedmi do radio listu
$form = new Form;
$form->addRadioList('answers', '', $answers) // radio list s navrhy odpovedi
->setRequired();
$form->addHidden('correctAnswer', $questionAll->correct_answer); // tady se snazim ziskat cislo spravne odpovedi
$form->addSubmit('send', 'Odpověď');
$form->onSuccess[] = [$this, 'formSucceeded'];
return $form;
}
public function formSucceeded(Form $form, $data): void
{
bdump($data->correctAnswer); // tady mi to bdumpuje prazdny retezec a ne cislo otazky
}
- nevim, jak poslat do sablony otazku, kdyz ji ziskavam z databaze az ve formulari
- nevim, jak do vyhodnoceni formularovych dat predat cislo se spravnou odpovedi
Dekuju a vazim si vsech rad.
- aha009
- Člen | 50
Ahoj,
asi bych to udělal takto:
1.
protected function createComponentQuestionForm(): Form
{
$question = $this->questionsManager->getQuestion($randomNumber);
$answers = $this->questionsManager->getAnswer('question_id = ?', $question);
$form->addRadioList('answers', $question , $answers)
->setRequired();
2. V DB bych si udělal sloupec, kde bych označil správné odpovědi.
public function formSucceeded($form, array $values): void
{
bdump($values['answers']);
}
- adferg
- Člen | 31
aha009 napsal(a):
Ahoj,
asi bych to udělal takto:
1.protected function createComponentQuestionForm(): Form { $question = $this->questionsManager->getQuestion($randomNumber); $answers = $this->questionsManager->getAnswer('question_id = ?', $question); $form->addRadioList('answers', $question , $answers) ->setRequired();
2. V DB bych si udělal sloupec, kde bych označil správné odpovědi.
public function formSucceeded($form, array $values): void { bdump($values['answers']); }
Aha, diky, tohle vlastne mam a funguje mi to. Co jsem resil je, ze nevim jak predat ty data z databaze do toho callbacku, abych mohl overit, ze se shoduje volba radiolistu a spravna odpoved. Zkousel jsem to pres addHidden. Podle ruznych postupu co jsem nasel jsem pochopil, ze by to mohlo vypadat addHidden(‚nazev‘, $hodnota), ale bdump(‚nazev‘) vraci jen prazdny string.
Ale je mozny, ze to mam cely postaveny blbe a dela se to jinak
Editoval adferg (24. 8. 2021 10:55)
- Michal Kumžák
- Člen | 106
Možnosti:
- Přes addHidden si tam posílej číslo otázky a ve formSucceeded si to můžeš vyhodnotit dotazem do $this->questionsManager.
- Načítej odpovědi se skutečnými ID v DB a následně ve formSucceeded se zeptej v $this->questionsManager zda je ID odpovědi správné.