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
+
0
-

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
+
0
-

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' );
}
Ugo
Člen | 6
+
0
-

díky za radu, chyba se projeví jenom tak, že to nedojde do callback funkce signInFormSubmitted

natrim
Člen | 73
+
0
-

mas tady chybu

<?php
$form->onSuccess[] = $this->signInFormSubmitted;
?>

melo by byt

<?php
$form->onSuccess[] = array($this, "signInFormSubmitted");
?>

Editoval natrim (3. 1. 2013 10:55)

jiri.pudil
Nette Blogger | 1032
+
0
-

$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)