Je možné změnit presenter v Routě?

- Michal Majer
 - Člen | 8
 
Zdravím,
už několik hodin se dělám s routovací třídou, která dědí ze
třídy Route a přepisuje metodu Match. Zde se
snažím pomocí hodnot vygenerovaných z databáze (kde mám uložené info
o presenteru, akci a id pro danou adresu) upravit $appRequest a
ten vrátit.
U Akce a ID mi vše funguje, pouze presenter se sice v debuggeru zobrazí, pouze ale jako nový parametr a stránka se zobrazí v defaultním presenteru. http://bit.ly/H6Ikbc
Chci se proto zeptat, je presenter vůbec možné upravit a pokud ne, jak vyřešit situaci, kdy potřebuju generovat různé presentery pro různé záznamy.
Takto vypadá část kódu v metodě match
$params = $appRequest->parameters;
$params['id'] = self::$allRoutesArr[$appRequest->parameters['id']]['url'];
$params['action'] = self::$allRoutesArr[$appRequest->parameters['id']]['action'];
$params['presenter'] = self::$allRoutesArr[$appRequest->parameters['id']]['presenter'];
$appRequest->parameters = $params;
return $appRequest;
Díky za jakoukoli pomoc, Michal.

- Michal Majer
 - Člen | 8
 
Zkoušel jsem před návratem hodnoty použít setPresenterName, to mě ale přesměruje na adresu: /destination/default/zadana-adresa.html a tím pádem se nepoužije Routa.
$appRequest->setPresenterName("Destination");
				
- Michal Majer
 - Člen | 8
 
Tak takové jedno řešení jsem vymyslel, ale zdá se mi to poměrně fuj fuj, co myslíte?
Do bootstrapu jsem vložil pole s presentery a
deklaraci routy provedl ve foreach. Do Match jsem pak vložil
podmínku, aby se routa neprovedla, neshodují-li se
presentery. Není lepší řešení? Díky
Editoval Michal Majer (3. 4. 2012 21:48)

- jasir
 - Člen | 746
 
Něco podobného jsem řešil, podědil jsem FilterRouter a přidal si filter na presenter:
<?php
class PageRouter extends FilterRoute {
	public function __construct($mask, $metadata = array(), $flags = 0,
		parent::__construct($mask, $metadata, $flags);
		$this->addFilter('page', array($this, 'filterIn'), array($this, 'filterOut'));
		$this->addFilter('presenter', array($this, 'presenterFilterIn'), array($this, 'presenterFilterOut'));
	}
...
?>