problém s přesměrováním po přihlášení
- ufňa
- Člen | 19
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
- ufňa
- Člen | 19
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
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 (-:
- ufňa
- Člen | 19
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?
- ufňa
- Člen | 19
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>
- ufňa
- Člen | 19
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?