Přihlášení a zobrazení Homepage

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

Ahoj,

chtěl bych Vás požádat o pomoc. Snažím se přepsat stránky, které jsem programoval strukturovaně cca před 2 lety. Protože jsem předtím žádný framework nepoužíval tak mám pořád problém s pochopením této filozofie programování. Nějaké základy objektového programování mám z jazyka Java, takže s tím to snad zas takový problém neni. Narazil jsem však na problém hned na začátku :-( .

Použil jsem skeleton ze staženého Nette. Snažím se přepsat administrační rozhraní, proto jsem tedy v bootstrap.php hned upravil routy na ->

<?php

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

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

Po spuštění se mi zobrazí přesně to co jsem chtěl. Login. Připojení k databázi jsem také úspěšně přidal a funguje. Když ale vyplním login infromace a dám přihlásit, tak bych podle tohoto:

<?php
$this->redirect('Homepage:');
?>

což je uloženo v LoginPresenter.php

očekávál, že se mi v případě úspěšného ověření uživatele vyvolá HomepagePresenter.php, který se zobrazí pomocí jeho template.

Jenže místo toho se obrazí toto:

Not Found

The requested URL /versico_nette_framework/document_root/homepage/ was not found on this server.

Chápu, že to je asi hloupý dotaz, protože tuším, že řešení bude triviální, ale bohužel jak už jsem psal, pořád nemůžu přijít na kloub jak to celé vlastně funguje. Když už jsem myslel, že to začínám chápat, tak se stane tohle :-).

Všem mockrát díky za odpověď.

marek.dusek
Člen | 99
+
0
-

Jen odhad – bezi ti mod_rewrite, resp. mas spravne nastaveny htaccess (treba ten ze skeletonu)?

RDPanek
Člen | 189
+
0
-

No můžeš poskytnout bootstrap, odlehčený config, LoginPresenter.php a HomepagePresenter.php? asi se tam bude líp hledat chybka – než takto.
Jinak bych taky doporučil zkontrolovat nastavení serveru.

Zkoušel jsi: Requirements-Checker ve složce tools na stejné úrovni, jako skeleton aplikace?
Requirements-Checker: by ti měl říct, zda-li máš správně nakonfigurovaný server.

Popik
Člen | 30
+
0
-

Bootstrap.php:

<?php

// Step 1: Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';



// Step 2: Configure environment
// 2a) enable Nette\Debug for better exception and error visualisation
Debug::enable();

// 2b) load configuration from config.ini file
Environment::loadConfig();
// Pripojeni k databazi
dibi::connect(Environment::getConfig('database'));



// Step 3: Configure application
// 3a) get and setup a front controller
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;



// Step 4: Setup application router
$router = $application->getRouter();

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

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


// Step 5: Run the application!
$application->run();

?>

LoginPresenter.php:

<?php

class LoginPresenter extends BasePresenter
{


	/**
	 * Login form component factory.
	 * @return mixed
	 */
	protected function createComponentLoginForm()
	{
		$form = new AppForm;
		$form->addText('username', 'Jméno:')
			->addRule(Form::FILLED, 'Prosím napište uživatelské jméno.');

		$form->addPassword('password', 'Heslo:')
			->addRule(Form::FILLED, 'Prosím napište heslo.');

		$form->addSubmit('login', 'Přihlásit');

		$form->onSubmit[] = callback($this, 'loginFormSubmitted');
		return $form;
	}



	public function loginFormSubmitted($form)
	{
		try {
			$values = $form->values;
			$this->getUser()->setExpiration('+ 20 minutes', TRUE);
			$this->getUser()->authenticate($values['username'], $values['password']);
			$this->redirect('Homepage:');

		} catch (AuthenticationException $e) {
			$form->addError($e->getMessage());
		}
	}

}

?>

HomepagePresenter.php:

<?php
class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$this->template->message = 'We hope you enjoy this framework!';
	}

}

?>

checker.php hlásí, že je vše ok. Akorát u pár věcí jako např. htaccess hlásí žlutý vykřičník. Ale pokud by byl prolém v tomhle, tak by přeci nenačetl ani ten login. htaccess jsem zkoušel i vymazat, ale žádná změna.

despiq
Člen | 320
+
0
-

.htaccess mazat nemuzes, ten co je ve skeletonu tam nech a zapni si mod_rewrite

uz ti to psali, asi ho nemas zaply

marek.dusek
Člen | 99
+
0
-

login ti funguje, protoze ho mas dostupny primo na index.php – je tedy evidentni, ze ti nejede mod_rewrite, resp. ho nemas sparnve nastaveny – je tedy treba bud upravit routy, nebo ho zapnout

a pokud netusis, o cem mluvime, http://www.justfuckinggoogleit.com/ ;)

Popik
Člen | 30
+
0
-

Vše moc díky za rady. Bylo to tím mod_rewrite. Vyřešil jsem to tímhle (našel jsem to v examples):

<?php
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
$router[] = new Route('index.php', array(
	'presenter' => 'Login',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>/<id>', array(
	'presenter' => 'Login',
	'action' => 'default',
	'id' => NULL,
));
} else {
    $router[] = new SimpleRouter('Login:default');

}
?>

mod_rewrite se mi nepodařilo zapnout, používám Zend Core 2.5 a nikde v konfiguraci jsme nenašel kde se dá definovat načtení modulů a ruční úprava httpd.conf nepomohla. Na víc stránky jsou na forpsi a podle phpinfo u nich taky mod_rewrite nejede.

Editoval Popik (6. 4. 2010 22:25)

despiq
Člen | 320
+
0
-

zadny mod_rewrite = zadne hezke url

Honza Kuchař
Člen | 1662
+
0
-

potom budes muset pouzivat simple router a url ve stylu ?bla=test