Nefunkční callback redirect na default
- Arti
- Člen | 5
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?
- Ot@s
- Backer | 476
Arti napsal(a):
Form vypadá takto:
<form action="/IIS/www/?action=in&do=signInForm-submit&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
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
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)