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'));
}
...
?>