Nefunkční callback redirect na default

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

Ahoj,
mám Nette 2.0.4 a PHP 5.3. Mám standardní formulář na přihlašování v SignPresenteru a když se pokusím přihlásit jsem přesměrován na Homepage:default s uživatelským jménem, heslem a send = Sign jako request. Zjistil jsem, že se metoda SignPresenter.signInFormSubmitted() vůbec nezavolá. Přesměrování záleží na nastavení SimpleRouteru:

<?php
$container->router[] = new SimpleRouter('Homepage:default');
?>

SignPresenter:

<?php
 protected function createComponentSignInForm($name)
    {

        $form = new Form($this,$name);
        $form->addText('username', 'Username:')
            ->setRequired('Please provide a username.');
        $form->addPassword('password', 'Password:')
            ->setRequired('Please provide a password.');
        $form->addCheckbox('remember', 'Remember me on this computer');

        $form->addSubmit('send', 'Sign in');
        $form->onSuccess[] = callback($this,'signInFormSubmitted');
        return $form;
    }

    public function signInFormSubmitted(Form $form)
    {
        Debugger::log("Sign In form submitted");
        try
        {
            $values = $form->getValues();
            if ($values->remember)
            {
                $this->getUser()->setExpiration('+ 14 days', FALSE);
            }
            else
            {
                $this->getUser()->setExpiration('+ 20 minutes', TRUE);
            }
            $this->getUser()->login($values->username, $values->password);
            $this->redirect('Homepage:');
        }
        catch (NS\AuthenticationException $e)
        {
            $form->addError($e->getMessage());
        }
    }
?>

Zpráva „Sign In form submitted“ se prostě nezaloguje.
Callback jsem se pokoušel přepsat na tlačítko, pomocí onSubmit na formulář a nic nepomáhá. Nevíte, kde by mohl být problém?

Jan Endel
Člen | 1016
+
0
-

Jaký formulář používáš? Nette\Application\UI\Form nebo Nette\Forms\Form?

Arti
Člen | 5
+
0
-

Používám Nette\Application\UI\Form. V šabloně pak formulář volám

{control signInForm}
Ot@s
Backer | 476
+
0
-

Divné je, že po submitu to ze SignPresenteru jde na HomepagePresenter… Koukni do HTML vygenerovaného přihlašovacího formu a pošli obsah atributu action z tagu FORM.

Arti
Člen | 5
+
0
-

Form vypadá takto:

<form action="/IIS/www/?action=in&amp;do=signInForm-submit&amp;presenter=Sign" method="post" id="frm-signInForm">
Ot@s
Backer | 476
+
0
-

Arti napsal(a):

Form vypadá takto:

<form action="/IIS/www/?action=in&amp;do=signInForm-submit&amp;presenter=Sign" method="post" id="frm-signInForm">

To je správně. Nemáš tam někde v nějaké action přesměrování, které jsi přehlédl? Nepoužíváš nějaký BasePresenter ve kterém by to mohlo být (na klasické volání parenta v startUp() a pod. se ani neptám)?

Arti
Člen | 5
+
0
-

Base presenter:

<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
            protected function createComponentNavigation($name)
        {
		$nav = new Navigation\Navigation($this, $name);
		$nav->setupHomepage("Home", $this->link("Homepage:"));
		$donor = $nav->add("Donor", $this->link("Donor:"));
	}
}

?>

V SignPresenteru vůbec startup nemám. Jediné přesměrování mám v DonorPresenter a tam to slouží jen pro redirect, když není uživatel přihlášený.

<?php
class DonorPresenter extends BasePresenter
{
        public function startup()
        {
            parent::startup();
            if (!$this->getUser()->isLoggedIn())
            {
                $this->flashMessage('You have to be signed in.');
                $this->redirect('Sign:in');
            }

        }
}
?>

Co na tom nechápu je úloha SimpleRouteru, když změním presenter SimpleRouteru v bootstrap.php, tak se redirectuje tam.

Arti
Člen | 5
+
0
-

Tak chyba objevena a tak blbá, že ji sem ani nechci psát. Chtěl jsem formulář nastylovat tak jsem v šabloně napsal něco takového:

            <form class="ym-form ym-columnar">
{control signInForm}
            </form>

Ten formulář byl nějak překrytý a samozřejmě to nefungovalo. Děkuji Ot@s za navedení k chybě.

Editoval Arti (5. 9. 2012 17:41)