Ajax formular v komponente a addError

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

Zdravim,

mam problem pri zpracovani ajaxoveho formulare v komponente.

Zpracovani formu takto:

	try {
    // auth by credentials
    $this->user->login($values->email, $values->passwd);

    // remember
    if($values->remember)
        $this->user->setExpiration(0, TRUE);

    // flash message
    $this->presenter->flashMessage("Byl jste přihlášen.", "success");

    // redirect
    $this->parent->redirect('this');

} catch (\Nette\Security\AuthenticationException $e) {
    $this->addError($e->getMessage());
} catch (\Exception $e) {
    if ($e instanceof \Nette\Application\AbortException) {
        throw $e;
    }
    $this->addError('Nepovedlo se přihlásit. Prosím kontaktujte administrátora.');

    error_log($e->getMessage());
}

V komponente mam klasickou tovarnicku createComponent…

A jde me o to ze prih. form me funguje pri zadani spravnych udaju, ale jakmile to ma zobrazit error, a jak je videt tak tam cpu chybovou hlasku pres addError metodu, je ajaxova odpoved prazdna: {"state":[]}. Pri nevyhozeni vyjimky me to v pohode vrati JSON s redirectem.

Jinak formular je ve snippetu kterej invaliduju v komnonente v metode render()

Takze hlavni problem je ajaxove vraceni i errorovych hlasek.

Prosim o help :) Urcite to bude naka banalita

Editoval fojta (25. 10. 2012 14:55)

enumag
Člen | 2118
+
0
-

Nejsem odborník přes snippety, ale neměl bys invalidovat snippet ve kterém je ten formulář? Jinak se ti ta chyba těžko může někde zobrazit.

studna
Člen | 181
+
0
-

Z tohoto kousku kódu člověk moc nevyčte. Pošli kód celé komponenty.

fojta
Člen | 24
+
0
-

Jak jsem psal vise, invaliduju v render metode. Ale snad spravne.

class AuthenticateControl extends Nette\Application\UI\Control
{

    /** @var string path to template file */
    private $template_file;


    /**
     * Render
     */
    public function render()
    {
        if(empty($this->template_file))
            throw new Exception('Template for component \''. $this->getName() .'\' was not filled.');


        if($this->presenter->isAjax()){
            $this->invalidateControl('form');
        }


        $this->template->setFile($this->template_file);
        $this->template->render();

    }

    protected function createComponentForm(){
	return \MujForm;
    }
}
fojta
Člen | 24
+
0
-

Chyba nalezena, presto diky :)