Proč se nevolá metoda odeslání formuláře?
- HonDem
- Člen | 30
Ahoj lidi. Narazil jsem v Nette na naprosto nepochopitelný problém. Mám vytvořenou metodu, která vrací formulář $form. Formulář má nastavené, že při správném odeslání se zavolá metoda commentFormSucceded… Jenomže ona se jakoby vůbec nevolá. Dokázal by mi tu někdo prosím poradit ? Všechno jsem dělal přesně tak, jak je to v tutoriálu.
<?php
//Vytvoří formulář pro komentáře
public function createComponentCommentForm()
{
$form = new Form();
$form->addText('name', 'Jméno:')
->setRequired();
$form->addText('email', 'Email:')
->setRequired();
$form->addTextArea('content', 'Komentář:', 50, 10);
$form->addSubmit('send', 'Odešli komentář');
$form->onSuccess[] = $this->commentFormSucceded;
return $form;
}
//Pokud byl formulář správně vyplněn, odešle se tato metoda
public function commentFormSucceded($form)
{
$values = $form->getValues();
$postId = $this->getParameter('postId');
$this->database->table('comments')->insert(array(
'post_id' => $postId,
'name' => $values->name,
'email' => $values->email,
'content' => $values->content,
));
$this->flashMessage('Děkuji za komentář', 'success');
$this->redirect('this');
}
?>
- Michal Vyšinský
- Člen | 608
Používáš Nette\Application\UI\Form
nebo
Nette\Forms\Form
? V presenterech bys měl použít
to první.
- Michal Vyšinský
- Člen | 608
No může to klidně vypadat new Form
ale na začátku souboru
musíš mít
use Nette\Application\UI\Form;
namísto
use Nette\Forms\Form;
- Dismember
- Člen | 50
ahoj,
narazil jsem také na tento problém.
Mám formulář v presenteru a když ho vykreslím automaticky pomocí
<?php
{control registraceLektora}
?>
tak se požadavaná onSuccess zavolá a vše proběhne podle mých pokynů.
Když ale formulář vykreslím ručně, tak se mi onSuccess nevolá.
Mám to nějak takto:
<?php
public function createComponentRegistraceLektora() {
$form = new Nette\Application\UI\Form;
$form->addText('name', "Jméno")
//->setRequired('Zadejte prosím Vaše jméno')
->setAttribute('placeholder', "Vaše jméno")
->getControlPrototype()->class('form-control');
$form->addText('surname', "Příjmení")
->setAttribute('placeholder', 'Vaše příjmení')
->getControlPrototype()->class('form-control');
...
$form->addSubmit('submit', 'Registrovat')
->getControlPrototype()->class('btn btn-default');
$form->onSuccess[] = array($this, 'registraceLektoraSubmitted');
return $form;
}
public function registraceLektoraSubmitted(Form $form) {
$values = $form->getValues();
$this->repository->vlozLektora(...);
$this->flashMessage('Odesláno');
$this->redirect("Homepage:");
}
?>
Prošel jsem fórum a vyzkoušel jsem mnohé tipy.
Do templejtu formulář předávám
<?php
$this->template->form = $this['registraceLektora'];
?>
Můžete mi, prosím, nějak pomoci?
Formuláře ručně vykresluji a zpracovávám docela často, ale toto se mi
ještě nestalo.
Díky za pomoc!
- Dismember
- Člen | 50
Majkl578: Myslel jsem, že je lepší, aby stejný problém byl ve stejném vláknu
Ručně vykresluju v template:
<?php
{form registraceLektora}
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<div class="row">
<div class="col-xs-12">
<form class="form-horizontal" role="form">
<div class="form-group">
<div class="col-sm-10">
<div class="row pad-0">
<div class="col-xs-4">{label name /}{input name}</div>
<div class="col-xs-4">{label surname /}{input surname}</div>
</div>
</div>
</div>
...
...
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<br/>
{input submit}
</div>
</div>
</form>
</div>
</div>
{/form registraceLektora}
?>