RouterFactory a FILTER_IN / FILTER_OUT callback
- besir
- Člen | 170
Čest práci v šest. Narazil jsem na takový absolutně pro mě nepochopitelný problém s filtry v routeru. Snažím se napsat router který se na každou routu zeptá do databáze a z ní se teprve doví kam ten odkaz vede.
Viděl jsem to vcelku jednoduše (základní bastl):
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('<node .*>', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'node' => array(
Route::FILTER_IN => self::filterIn($node),
),
));
return $router;
}
public static function filterIn($uri)
{
$this->getDatabase()->query('SELECT route_request, itemid'
.'FROM menu'
.'WHERE url = %s', $uri)
->fetchSingle();
}
Ale zaboha mi nejde do hlavy proč nemám proměnnou $node v Route::FILTER_IN ⇒ self::filterIn($node). IMHO jsem to tak dříve používal a i v nějakých návodech a po fóru jsem toto dohledal, už do toho asi čumím moc dlouho, ale prostě chybu nevidím. Vždy jen dostanu jen Notice s Undefined variable: node
Tak jsem z toho nějaký bledý, jen douufám, že se nebudu muet hanbou propadnout až mě někdo nakopne :D
Díky za pomoc
- David Matějka
- Moderator | 6445
- filterIn je staticka funkce, tezko tam pouzijes
$this
- na FILTER_IN musis navazat callback, to, co pises by do filter_in ulozilo navratovou hodnotu z te funkce (tedy v pripade, ze by existovala promenna $node, ktera samozrejme neexistuje, jelikoz se vytvari pri routovani)
reseni:
array (
Route::FILTER_IN => array($this, 'filterIn');
)
- besir
- Člen | 170
matej21 napsal(a):
- filterIn je staticka funkce, tezko tam pouzijes
$this
- na FILTER_IN musis navazat callback, to, co pises by do filter_in ulozilo navratovou hodnotu z te funkce (tedy v pripade, ze by existovala promenna $node, ktera samozrejme neexistuje, jelikoz se vytvari pri routovani)
reseni:
array ( Route::FILTER_IN => array($this, 'filterIn'); )
Nooo to jsem si původně také myslel, ale když použiju filterIn jako callback, jak píšeš, tak se vůbec nezavolá, proto jsem tam zkusil narvat tu funkci tak jako výše. Takže stále je asi někde něco prohnilého :-(
- David Matějka
- Moderator | 6445
nezavola se, nebo se z nej nic nevrati? nemas tam return statement..
pokud ani nezavola, bude chyba asi nekde jinde – asi se nematchne url
s maskou..