nefunkční formulář na defaultní routě
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Ugo
- Člen | 6
Ahoj, máme takový zvláštní problém, že nám na defaultní routě nefunguje callback formuláře, když dám jakoukoliv routu, tak to není problém (i ta samá metoda, jen z ní udělám nedefaultní)
routy:
$container->router[] = $adminRouter = new NRouteList('Admin');
$adminRouter[] = new NRoute('admin/<presenter>/<action>', 'Default:default');
$container->router[] = $apiRouter = new NRouteList('Api');
$apiRouter[] = new RestRoute( 'api/<presenter>[/<id>]', array( 'presenter' => 'Default:default' ), RestRoute::RESTFUL );
$container->router[] = $frontRouter = new NRouteList('Front');
$frontRouter[] = new NRoute( '<presenter>/<action>[/<id>]', 'Index:index' );
presenter:
class Front_IndexPresenter extends Front_SignPresenter {
public function beforeRender() {
$this->template->loggedIn = $this->loggedIn;
}
public function renderIndex() {
$this->template->title = 'any value';
}
public function renderTest() {
$this->template->title = 'TEST';
}
}
rodič presenteru:
class Front_SignPresenter extends Front_BasePresenter {
protected $session;
protected $loggedIn = false;
protected function startup() {
$this->session = $this->getSession( 'Front' );
$this->session->setExpiration( '+ 20 minutes' );
if ( isset( $this->session->username ) ) {
$this->loggedIn = $this->session->username;
}
parent::startup();
}
protected function createComponentSignInForm() {
$form = new NAppForm;
$form->addText( 'username', 'Jméno:' )
->setRequired( 'Prosím, vložte své přihlašovací jméno.' );
$form->addPassword( 'password', 'Heslo:' )
->setRequired( 'Prosím, vložte své heslo.' );
$form->addSubmit( 'send', 'Přihlásit' );
$form->onSuccess[] = $this->signInFormSubmitted;
return $form;
}
public function signInFormSubmitted( $form ) {
try {
$values = $form->getValues();
$this->getUser()->setAuthenticator( new Model_Authenticator( $this->context->mysql ) )->login( $values->username, $values->password );
$this->getUser()->setExpiration( '+ 20 minutes', TRUE );
$this->session->username = $values->username;
$this->redirect( 'index' );
} catch ( NAuthenticationException $e ) {
$form->addError( $e->getMessage() );
return;
}
}
}
ve view pak klasicky {control signInForm}
Díky za jakékoliv podněty.
Editoval Ugo (2. 1. 2013 16:38)
- castamir
- Člen | 629
Jak se projeví ta nefunkčnost? vyhodí to chybu? Jakou?
Každopádně si sprav ten try-catch v callbacku. Do něj patří jen to, co
vyhazuje výjimku, což je jen
$this->getUser()->setAuthenticator( new Model_Authenticator( $this->context->mysql ) )->login( $values->username, $values->password );
public function signInFormSubmitted( $form ) {
$values = $form->getValues();
try {
$this->getUser()->setAuthenticator( new Model_Authenticator( $this->context->mysql ) )->login( $values->username, $values->password );
} catch ( NAuthenticationException $e ) {
$form->addError( $e->getMessage() );
return;
}
$this->getUser()->setExpiration( '+ 20 minutes', TRUE );
$this->session->username = $values->username;
$this->redirect( 'index' );
}
- jiri.pudil
- Nette Blogger | 1032
$this->signInFormSubmitted
je v pořádku.
EDIT: …od verze 2.0.4
Co znamená „nedojde do callback funkce“? Odešle se formulář? Na jaký signál/URL?
Editoval jiri.pudil (3. 1. 2013 11:12)