Nette\Application\AbortException po odeslání formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Richard Faila
Člen | 40
+
0
-

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
+
0
-

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)

Aurielle
Člen | 1281
+
0
-

K formuláři: fireEvents() je zbytečné, pokud používáš Nette\Application\UI\Form.

Richard Faila
Člen | 40
+
0
-

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
+
0
-

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)

22
Člen | 1478
+
0
-

Bych si spíš tipnul, že $this->flashMessage('success message'); volá až po redirectu…

Editoval 22 (3. 5. 2012 22:34)

Richard Faila
Člen | 40
+
0
-

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.

ViPEr*CZ*
Člen | 817
+
0
-

Hmmm asi to bude chtít výpis kódu… nic mě nenapadá… mně to na sandboxu funguje v pohodě.