Proč se filtrovací funkce provádí dvakrát?
- joe
- Člen | 313
Ahoj,
nechápu, proč se filtrovací funkce provádí(/vypisuje se to) dvakrát. Jak je to vůbec možné?
$frontRouter[] = new Route('<slug [a-z]+>', array(
'presenter' => 'Homepage',
'action' => 'default',
'slug' => array(
Route::FILTER_IN => function ($slug) use($container) {
echo 'X';
die();
},
Route::FILTER_OUT => function ($id) use($container) {
}
)
));
Pokud jdu na URL, která odpovídá routě, v prohlížeči se mi objeví „XX“, může mi to někdo vysvětlit?
Díky
Editoval joe (19. 1. 2013 7:19)
- Filip Procházka
- Moderator | 4668
Nejprve router zpracuje http request a vrátí požadavek pro presenter (to je to poprvé), potom presenter volá vytvoření url pro sebe sama (druhé volání).
Je to kvůli tomu, aby ověřil, že současná adresa je „kanonická“, tzn nejefektivnější možná (nejprvnější router, co nejméně parametrů v url). A když není, tak na ni přesměruje. Je to kvůli tomu, aby na každou stránku webu byl pouze jeden odkaz.
A může se ti povést, že se ti zavolá ještě jednou, když se vykresluje routovací panel, to se pak zavolá vždy, ikdybys tam volal exit (nebo die).
- joe
- Člen | 313
Díky, ale jak to udělat, pokud chci používat dibi? Nechci žádného
pomocníka notORM ani ORM framework, protože mi to přijde zbytečné (prosím
nevyvracet :), díky).
Nechci žádné zbytečné dotazy, ale v tomto případě se udělají navíc
2 a další stejný dotaz v Presenteru (voláním metody modelu). Ještě
prosím nakopnout jak to udělat bez těch 3 zbytečných dotazů na
DB? díky
Aha, vlastně si to asi můžu řešit v modelu, nějakým polem
$cache
, třeba, ne?
Editoval joe (19. 1. 2013 21:43)