Nette\Application\AbortException po odeslání formuláře
- Richard Faila
- Člen | 40
Mám následující formulář
<?php
protected function createComponentDiagnozaForm($name) {
$form = new Form;
$form->addHidden('id');
$form->addHidden('navsteva_id');
$form->addHidden('mkn10_id')
->setRequired('Vyberte prosím diagnozu ze seznamu');
$form->addText('diagnoza', 'Diagnóza',30)
->setRequired('Vyplňte diagnozu')
->addRule(Form::MAX_LENGTH, null, 30)
->setAttribute('placeholder', 'napište alespoň 3 písmena');
$form->addText('pristroj', 'Přístroj')
->addRule(Form::MAX_LENGTH, null, 45);
$form->addText('material', 'Materiál')
->addRule(Form::MAX_LENGTH, null, 255);
$form->addTextArea('komentar', 'Komentář');
$form->addSubmit('submitButton', 'Uložit');
$form->onSuccess[] = callback($this, 'submitDiagnozaForm');
$form->fireEvents();
return $form;
}
public function submitDiagnozaForm($form) {
$values = $form->getValues();
unset($values['id']);
unset($values['diagnoza']);
$row = $this->getService('model')->database->table('diagnoza')->insert($values);
$this->redirect('Navsteva:view',3);
}
?>
Akorát, že když odešlu formulář, dostanu hlášku Nette\Application\AbortException bez vysvětlení.
Když se pokusím odeslat flassMessage dostanu zase tohle:
Nette\InvalidStateException
Cannot set cookie after HTTP headers have been sent (output started at D:\Web\www\ernisto\temp
\cache\_Nette.FileTemplate\_templates.Navsteva.view.latte-4a17802f4b14054b0f461a9c5933d907.php:26).
Opravdu nevím co dělám špatně, cache jsem smazal asi tisíckrát, zkusil jsem i dev verzi a pořád to samé. Nemá někdo představu co s tím?
PHP 5.3.6 | Server Apache/2.2.8 (Win32) PHP/5.3.6 | Nette Framework 2.0.3
Editoval Richard Faila (3. 5. 2012 20:15)
- ViPEr*CZ*
- Člen | 817
To redirect bude blbě… mrkněte do dokumentace. ;-) Nejspíš asi někde odchytáváte vyjímku, protože samotné redirect tuto vyjímku vyhazuje.
Přesměrování okamžitě ukončí činnost presenteru vyhozením tzv. ukončovací výjimky Nette\Application\AbortException.
PS: naformátujte tu chybu, ať to neničí výpis příspěvku.
Editoval ViPEr*CZ* (3. 5. 2012 17:57)
- Richard Faila
- Člen | 40
Díky za reakce, zatím to vypadá, že problém byl v
<?php
$form = new Form;
?>
Pokud se místo toho použije
<?php
$form = new Nette\Application\UI\Form;
?>
tak to funguje. Akorát, že nefungují flassMessages. Pokud nějakou zkusím v callbacku formuláře přidat, projde to v pohodě, ale žádná se po redirectu nevypíše. Jinak se mi ale vypisují v pořádku.
- ViPEr*CZ*
- Člen | 817
Ano, pokud pracujete s komponentou, pak je potřeba z tohoto namespace
Nette\Application\UI brát.
Používáte flash zprávy takto: https://doc.nette.org/…n/components#…
Editoval ViPEr*CZ* (3. 5. 2012 22:23)
- Richard Faila
- Člen | 40
22 napsal(a):
Bych si spíš tipnul, že
$this->flashMessage('success message');
volá až po redirectu…
Zase tak moc velký začátečník nejsem, tohle mám určitě správně. Vypisování je zařízeno přes
<?php
//@layout.latte
<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>
?>
A taky mi mi přidávání zpráv funguje, ale jen pokud jí přidám v renderView,kde se potom zobrazí. Pokud jí ale přidám a následuje redirect, už se nic nevypíše.