Získání dat z low-level formuláře
- Johnczek
- Člen | 37
Zdravím, musel jsem díky lepšímu stylování sáhnout k low level formuláři, v šabloně ho mám definovaný takto
{form addReview}
... data
{/form}
V presenteru pak
protected function createComponentAddReview() {
$form = new Form;
$form->addProtection('Platnost formuláře vypršela! Zkuste to prosím znovu.');
$form->onSuccess[] = [$this, 'addReviewSucceeded'];
return $form;
}
protected function addReviewSucceeded(Form $form, $values) {
dump($values);
}
Problém nastává na řádku onSuccess.
Tracy vyhazuje tento error
Call to undefined method parent::addReviewSucceeded().
, nevím,
proč se volá metoda rodiče ale i když jsem i dal do rodičovské třídy,
házelo to podobné blbosti.
Potřeboval bych vytáhnout data z formuláře a uložit je do
databáze.
Mohl by mi někdo poradit co dělám špatně?
- Johnczek
- Člen | 37
David Grudl napsal(a):
Nejspíš nemůže být protected, ale musí být public.
Funguje. Ještě menš ídotaz k tomu. Ta metoda addReviewSucceeded(Form $form) se provede hned po načtení šablony, což je nežádoucí chování, rád bych aby proběhla pouze a jen po submitu. Lze to nějak provést?
Vypadá to zatím takto
public function createComponentAddReview() {
$form = new Form;
$form->addProtection('Platnost formuláře vypršela! Zkuste to prosím znovu.');
$form->onSuccess[] = [$this, 'addReviewSucceeded'];
return $form;
}
public function addReviewSucceeded(Form $form) {
$data = $form->getHttpData();
if($data['isUpdate'] == 1) {
$this->updateReview($data['reviewId'], $data['type'],$data['text'], $data['ratio']);
} else {
}
if($this->product) {
$this->flashMessage("Recenze úspěšně vložena", "success");
$this->redirect("Detail:default");
}
}
- Johnczek
- Člen | 37
ali napsal(a):
onSuccess callback se spousti az po odeslani a uspesne validaci formulare, ne pri jeho renderovani.. nespoustis tu metodu nekde v presenteru?
A vytvoreni componenty dej protected, to ale tvuj momentalni problem nevyresi.
protected function createComponentAddReview() {
Nevolám. Jediné dva výskyty názvu metody je při její definici a při definici onsuccess př ivytváření komponenty. Výsledný form je takový
<form action="/GITprojects/IDS-IIS/www/detail/?id=1" method="post" id="frm-addReview">
<div class="row">
<div class="col-12 text">
<textarea name="text" class="form-control" rows="6">Dlouhy text bla bla</textarea>
</div>
</div>
<div class="row">
<div class="col-6">
<label>Hodnocení:</label>
<div class="radio-review-block">
<div class="radio review">
<label class="radio-inline"><b>0</b><input type="radio" name="ratio" value="0"></label>
<label class="radio-inline"><b>1</b><input type="radio" name="ratio" value="1"></label>
<label class="radio-inline"><b>2</b><input type="radio" name="ratio" value="2"></label>
<label class="radio-inline"><b>3</b><input type="radio" name="ratio" value="3"></label>
<label class="radio-inline"><b>4</b><input type="radio" name="ratio" value="4"></label>
<label class="radio-inline"><b>5</b><input type="radio" name="ratio" value="5"></label>
<label class="radio-inline"><b>6</b><input type="radio" name="ratio" value="6"></label>
<label class="radio-inline"><b>7</b><input type="radio" name="ratio" value="7"></label>
<label class="radio-inline"><b>8</b><input type="radio" name="ratio" value="8"></label>
<label class="radio-inline"><b>9</b><input type="radio" name="ratio" value="9"></label>
<label class="radio-inline"><b>10</b><input type="radio" name="ratio" value="10" checked=""></label>
</div>
<div class="max-value">/10</div>
</div>
</div>
<div class="offset-2 col-4">
<label for="type">Typ recenze:</label>
<select id="type" name="type" class="form-control">
<option value="Uživatelská">Uživatelská</option>
<option value="Odborná" selected="">Odborná</option>
</select>
</div>
</div>
<div class="row">
<div class="offset-10 col-2 submit-row">
<input type="submit" class="btn btn-primary">
</div>
</div>
<input type="hidden" name="isUpdate" value="1">
<input type="hidden" name="productId" value="1">
<input type="hidden" name="userId" value="4">
<input type="hidden" name="reviewId" value="3">
<input type="hidden" name="_token_" value="dpqw9mk76qPq1AjFUnFgnLFKyw7MtpOUPfdp0="><input type="hidden" name="_do" value="addReview-submit"><!--[if IE]><input type=IEbug disabled style="display:none"><![endif]-->
</form>
Nevím proč se to spouští při renderu… :(