Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Ahoj. Stáhl jsem si nové Nette a narazil jsem na takový problém. Absolutně nechápu, co dělám špatně, ale určitě to bude nějaká strašná kravina. Jde o to, že chci vytvářet sign in form na hlavní stránce. Použiju tedy SignInFormFactory, který mi vytvoří formulář a potom si ho vykreslím. V momentě, kdy ho ale odešlu, tak se nic neděje. Prostě žádný callback. Někdo nějaký nápad, co by s tím mohlo být, nebo co dělám špatně?

HomepagePresen­ter.php

<?php

namespace App\Presenters;

use Nette,
        App\Model,
        App\Forms\SignFormFactory;


/**
 * Homepage presenter.
 */
class HomepagePresenter extends BasePresenter
{
        /** @var SignFormFactory @inject */
        public $factory;

        /**
         * Sign-in form factory.
         * @return Nette\Application\UI\Form
         */
        public function createComponentSignInForm(){
                $form = $this->factory->create();
                $form->onSuccess[] = function ($form) {
                        $form->getPresenter()->redirect('Homepage:');
                };
                return $form;
        }

        public function renderDefault(){
                if($this->getUser()->isLoggedIn()){
                        $this->redirect('Site:default');
                }
        }

        public function actionOut(){
                $this->getUser()->logout();
                $this->flashMessage('You have been signed out.');
                $this->redirect('in');
        }

}
Odpovědět 23.3.2015 14:43
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Jedinej callback je redirect na homepage, neni to tim? :D

 
Nahoru Odpovědět 23.3.2015 14:49
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

Tohle je přesně zkopírované z SignPresenteru. A tam to je takhle a funguje to :D

Nahoru Odpovědět 23.3.2015 14:50
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Z jaké přesně stránky?
Minimálně ti v té callback funkci chybí

$this->user->login($form->values);
 
Nahoru Odpovědět 23.3.2015 14:57
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

Takhle je to pořešené v SignPresenteru a funguje to.

protected function createComponentSignInForm()
        {
                $form = $this->signinform->create();
                $form->onSuccess[] = function ($form) {
                        $form->getPresenter()->redirect('Homepage:');
                };
                return $form;
        }
Nahoru Odpovědět 23.3.2015 15:01
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Z jaké stránky čerpáš ten zdroják?

 
Nahoru Odpovědět 23.3.2015 15:03
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

HomepagePresenter jsem psal já a to, co jsem teď poslal bylo normálně v Nette v presenteru SignPresenter.

Nahoru Odpovědět 23.3.2015 15:04
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Ta továrnička obsahuje svou callback fci (formSucceeded), která se postará o přihlášení. Druhá v pořadí je ta, která zavolá redirect.
Měnil jsi v tom ještě něco, nebo jsi jen metodu ze SignPresenteru zkopíroval do HomepagePresenteru?

 
Nahoru Odpovědět  +1 23.3.2015 15:12
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

Pouze jsem zkopíroval metodu. Napadlo mě - nemůže to být jiným modifikátorem přístupu? V mém kódu jsem použil public a v SignPresenteru je protected.

Nahoru Odpovědět 23.3.2015 15:15
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

Zkus to taky hodit protected. V Nette je tolik magie, že to může udělat v podstatě cokoliv...

 
Nahoru Odpovědět 23.3.2015 15:18
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Jan Demel:

Zkusím jak se vrátím domů. Zatím děkuji :)

Nahoru Odpovědět 23.3.2015 15:23
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Martin Konečný (pavelco1998):

No ted doslova nemáš zač. S Nette sice nějakou dobu dělám, ale tento způsob nepoužívám, tak o tom moc nevím :(

 
Nahoru Odpovědět 23.3.2015 15:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.