problém s přesměrováním po přihlášení

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

Ahoj,

programuji přihlášení. Používám Nette 2, php 5.3 a XAMPP 1.7.3.

Problém je že po přihlášení, které proběhne OK i získání identity je OK nedojde na přesměrování na EditPresenter, ale na výchozí stránku XAMPPu bez jaké koliv hlašky.

SignPresenter

<?php
namespace AdminModule;

use Nette\Application\AppForm, Nette\Forms\Form, Nette\Web\User, Nette\Web\Session,
 Nette\Application\PresenterComponent;

class SignPresenter extends BasePresenter {

      protected function startup() {
        parent::startup();
    }

    function createComponentSignForm() {

        $form = new AppForm();
        $form->addText('login', 'Přihlášení: ')
                ->setRequired();
        $form->addPassword('password', 'Heslo: ')
                ->setRequired();
        $form->addSubmit('send', 'Přihlásit');
        $form->onSubmit[] = callback($this, 'formSubmitted');
        return $form;
    }

    function formSubmitted($form) {

        $values = $form->getValues();

        try {

            $this->getUser()->login($values['login'], $values['password']);
            $this->flashMessage('Byl jste prihlasen');
            $this->redirect('Edit');
        } catch (\Nette\Security\AuthenticationException $e) {
            $form->addError($e->getMessage());
        }
    }


}

EditPresenter

<?php

namespace AdminModule;

class EditPresenter extends BasePresenter {

    protected function startup() {
        parent::startup();
    }

    public function renderDefault() {
        echo 'Prihlasen';
    }

}

říká to někomu něco?

Díky Pavel

Bertram
Člen | 75
+
0
-

Pokud přesměrováváš na jiný presenter použij toto:

$this->redirect('Edit:');  //presenter Edit action Default
ufňa
Člen | 19
+
0
-

Bertram napsal(a):

Pokud přesměrováváš na jiný presenter použij toto:

$this->redirect('Edit:');  //presenter Edit action Default

Stále nic stejné :(

Bertram
Člen | 75
+
0
-

BasePresenter máš prázdný?

ufňa
Člen | 19
+
0
-

Bertram napsal(a):

BasePresenter máš prázdný?

Ano mám tam je toto:

<?php

namespace AdminModule;

use \Nette\Application\Presenter;

class BasePresenter extends Presenter {

	protected function startup() {
		parent::startup();
	}
}
Bertram
Člen | 75
+
0
-

Zkus místo toho redirect(u) něco vypsat na obrazovku,jestli k té chybě dochází ještě před ním nebo až po něm.

Nevím jestli je to nejprofesionálnější přístup,ale mě tento způsob hledání chyby často pomůže (-:

ufňa
Člen | 19
+
0
-

Bertram napsal(a):

Zkus místo toho redirect(u) něco vypsat na obrazovku,jestli k té chybě dochází ještě před ním nebo až po něm.

Nevím jestli je to nejprofesionálnější přístup,ale mě tento způsob hledání chyby často pomůže (-:

Také tento přístu používám :)

formSubmitted jsem změnil na:

function formSubmitted($form) {

       $values = $form->getValues();

       try {

           $this->getUser()->login($values['login'], $values['password']);
           dump('test pred redirect');
           $this->redirect('Edit:');
           dump('test po redirect');
       } catch (\Nette\Security\AuthenticationException $e) {
           $form->addError($e->getMessage());
       }
   }

došlo k vypsání: „test pred redirect“ (18)

a pak byla vyhozena vyjímka:

InvalidStateException

Cannot set HTTP code after HTTP headers have been sent (output started at D:\PHP\xampp\xampp\htdocs\homolka_eu\libs\Nette\Diagnostics\Debug.php:590).

Když redirect zakomentuji tak to proběhne.

Editoval ufňa (10. 2. 2011 14:12)

Bertram
Člen | 75
+
0
-

No a teď bych vyzkoušel přejmenovat cíl přesměrování a očekával chybovou hlášku.
Zkrátka nemám o chybě ani šajn,tak bych zkoušel.

app/AdminModule/presenter/NeEditPresenter.php

<?php

namespace AdminModule;

class NeEditPresenter extends BasePresenter {

    protected function startup() {
        parent::startup();
    }

    public function renderDefault() {
        echo 'Prihlasen';
    }

}

No a pokud by teď ta chybová hláška nevyskočila,tak bych si šel asi zapálit (-:

voda
Člen | 561
+
0
-

Zkus si dumpnout $this->link('Edit:');. A taky by se hodilo, kdybys napsal na jakou url tě to přesměruje a na jaké url má být presenter. Podle mě budeš mít špatně routy.

ufňa
Člen | 19
+
0
-

voda napsal(a):

Zkus si dumpnout $this->link('Edit:');. A taky by se hodilo, kdybys napsal na jakou url tě to přesměruje a na jaké url má být presenter. Podle mě budeš mít špatně routy.

Když dumpnu $this->link(‚Edit:‘); vypíše to „/homolka_eu/document_root/admin.ne-edit/“ (40)

Když to zadám jako adresu funkuje to stejně jako po redirect a to že to přesměruje na http://localhost/xampp/

Routy mám takhle:

<?php

use Nette\Debug, Nette\Environment, Nette\Application\SimpleRouter, Nette\Application\Route;

require_once LIBS_DIR . '/Nette/loader.php';

Debug::enable();

Environment::loadConfig();


//$session = Environment::getSession();
//$session->setSavePath(APP_DIR . '/sessions/');

$application = Environment::getApplication();
//$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;

$router = $application->getRouter();

$router[] = new Route('index.php', array(
	'presenter' => 'Admin:Sign',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>/<id>', array(
	'presenter' => 'Admin:Sign',
	'action' => 'default',
	'id' => NULL,
));



dibi::connect(Environment::getConfig('database'));

$application->run();
?>

jak by jsi je nastavit ty?

Aurielle
Člen | 1281
+
0
-

RewriteBase?

ufňa
Člen | 19
+
0
-

gmvasek napsal(a):

RewriteBase?

soubor .htaccess vypadá takhle:

# disable directory listing
Options -Indexes

# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

Aurielle
Člen | 1281
+
0
-

Nastav RewriteBase na root tvého webu, tedy RewriteBase /homolka_eu/document_root/

ufňa
Člen | 19
+
0
-

gmvasek napsal(a):

Nastav RewriteBase na root tvého webu, tedy RewriteBase /homolka_eu/document_root/

tak už to nejde na http://localhost/xampp/ ale vyhazuje to vyjímku:

InvalidStateException

Cannot set HTTP code after HTTP headers have been sent (output started at D:\PHP\xampp\xampp\htdocs\homolka_eu\libs\Nette\Diagnostics\Debug.php:590).

někde jsem se dočet že je to způsobené předčasným vypsáním výstupu, ale netuším kde by to mělo být. Napadáti něco?

Bertram
Člen | 75
+
0
-

Zruš ty dump(y)

ufňa
Člen | 19
+
0
-

Pánové děkuji moc za trpělivost už to jedééééé. Máte můj obdiv :)