Databazova route a zmena presenteru

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

Zdarvim,
trapim sa s podla mna urcite jednoducho riesitelnym problemom. Viem, ze sa tu podobne temy riesili, ale nepodarilo sa mi podla toho dopracovat k nicomu pojazdnemu. Chcel by som vytvorit routu, ktora bude komunikovat s databazou. V db mam 2 druhy zaznamov. Jeden je plnohodnotny (obsahuje text stranky, ktory sa potom proste vypise) a druhy obsahuje udaj o presenteri a akcii, ktora sa ma o vyprodukovanie takej stranky postarat. Tu prvu cast (jedoduche vypisanie stranky podla url v databaze) mam vyriesenu.
Pointa je, ze by som chcel k obom druhom stranok pouzivat rovnaku formu url.
Napr:
url ⇒ spracovanie
‚kontakt‘ ⇒ jednoduchy vypis
‚galeria‘ ⇒ Gallery:default
‚novinky‘ ⇒ News:default

skusil som napisal vlastnu routu a teraz neviem prist na to, ci robim nieco uplne zle, alebo len trocha zle :)

Stranka vypise Nette\Application\InvalidLinkException a No route for Gallery:default(url=galeria)

bootstrap.php:

<?php
$router[] = new GeneratedPageRoute('<url ([a-zA-Z0-9_\-]+)>', array(
	'presenter' => 'Page',
	'action' 	=> 'default',
	'url' 		=> ''
));
?>

GeneratedPageRoute.php:

<?php

/**
 *	Funguje, ak hladane url existuje ulozene v
 *	databaze a stranka je typu generated_page
 */
class GeneratedPageRoute extends Nette\Application\Route
{

	public function match(Nette\Web\IHttpRequest $httpRequest)
	{
		$request = parent::match($httpRequest);

		if ($request === NULL){
			return NULL;
		}

		$params = $request->getParams();
		$page = dibi::query("SELECT * FROM pages WHERE url=%s", $params['url'], "AND content_type='generated_page'")->fetch();

		if (empty($page)){
			return NULL;	//	ziaden match -> koncime
		}

		$request = new Nette\Application\PresenterRequest(
			$page['presenter'],
			$httpRequest->getMethod(),
			$params,
			$httpRequest->getPost(),
			$httpRequest->getFiles(),
			array('secured' => $httpRequest->isSecured())
   		);

		return $request;
	}



	public function constructUrl(Nette\Application\PresenterRequest $request, Nette\Web\IHttpRequest $context)
	{

		$params = $request->getParams();
		$uri = $context->getUri()->basePath . rawurlencode($params['url']);
		unset($params['url'], $params['action']);

		$query = http_build_query($params, '', '&');
		if ($query !== '') $uri .= '?' . $query;

		return $uri;
	}



}
?>

Zaujimave je, ze popri chybovej stranke ladenky sa mi pri route v debug bare zobrazi: Matched ? yes. Class GeneratedPageRoute, Gallery:default, url = galeria.

Vedel by mi niekto poradit, v com je problem?

Budem velmi vdacny za kazdu pomoc!

tomolas
Člen | 66
+
0
-

Tak nikto nic? Este stale by mi pomohla nejaka rada.

David Ďurika
Člen | 328
+
0
-

cav,
ak som ta spravne pochopil, tak aj ja by som potreboval nieco podobne…

podarilo sa ti to uz vyriesit? ako si natom teraz?