To może trochę wyjaśnień. Mam testy, do których tworzę żetony. Mógłbym utworzyć nowy moduł w panelu admina, ale do każdego testu będę potrzebował generować po kilkanaście/kilkadziesiąt żetonów. Byłoby to uciążliwe, dlatego chciałem dodać akcję w tabelce z testami, gdzie po wejściu w formularzu wpiszę liczbę i po kliknięciu save utworzy mi się taka liczba żetonów - będą się one wyświetlać pod tym formularzem. Żeby żetony przypisać do konkretnego testu, muszę przekazać gdzieś w formularzu jego id. Za pierwszym razem nie jest to problem - $request->getParameter('id') załatwia sprawę, przekazuję ten parametr do opcji formularza i ustawiam go jako input hidden. W akcji sprawdzania formularza odczytuję parametr z ukrytego pola. Niestety nie potrafię już niżej wyświetlić utworzonych dotychczas żetonów, bo nie potrafię odczytać w akcji executeZapiszZetony ani odczytajZetonyForm id testu, na którym obecnie operuję.
Po wejściu w konkretną pozycję mam formularz i wypisane żetony dla danego testu:
public function executeListZetony(sfWebRequest $request) {
$this->idTestu = $request->getParameter('id');
$this->formularz = new GenerujZetonyForm
(null, array('idTestu' => $this->idTestu)); $this->zetony = Doctrine::getTable('Zetony')->pobierzZetony($this->idTestu);
}
Po wpisaniu liczby i kliknięciu save już parametru id nie widzę:
public function executeZapiszZetony(sfWebRequest $request) {
$this->forward404Unless($request->isMethod(sfRequest::POST));
$this->idTestu = $request->getParameter('id');
$this->formularz = new GenerujZetonyForm
(null, array('idTestu' => $this->idTestu));
$this->zetony = Doctrine::getTable('Zetony')->pobierzZetony($this->idTestu);
$this->odczytajZetonyForm($request, $this->formularz);
$this->setTemplate('listZetony');
}
Sprawdzanie formularza:
protected function odczytajZetonyForm(sfWebRequest $request, sfForm $form) {
$form->bind($request->getParameter($form->getName()));
if ($form->isValid()) {
$wartosci = $form->getValues();
$idTestu = $wartosci['idTestu'];
$this->redirect('testy');
}
}
Formularz:
class GenerujZetonyForm extends sfForm {
public function configure() {
$idTestu = $this->getOptions();
'idTestu' => new sfWidgetFormInputHidden
(array('default' => $idTestu['idTestu'])), 'liczbaZetonow' => new sfWidgetFormInput()
));
$this->setValidators(array( 'idTestu' => new sfValidatorInteger
(array( 'min' => 1
)),
'liczbaZetonow' => new sfValidatorInteger
(array( 'min' => 1,
'max' => 100
))
));
$this->widgetSchema->setNameFormat('generujZetony[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
}
}
I szablon:
<form action="
<?php echo url_for
('@zapiszZetony?module=testy&action=zapiszZetonye&id=' . $idTestu); ?>" method="post">
<table id="kategorie_form">
<tfoot>
<tr>
<td colspan="2">
<input type="submit" value="Utwórz żetony" />
</td>
</tr>
</tfoot>
<tbody>
<?php echo $formularz; ?> </tbody>
</table>
</form>