routování vždy přesměruje na stejnou stránku
- mauricio
- Člen | 6
Ahoj,
mám problém s routováním:
mám následující adresu:
nazev_webu/package/default/123
chtěl bych takovouto:
nazev_webu/balicek/nazev-balicku
kde „nazev-balicku“ natahnu z db (podle id).
Kód vypadá takto:
<?php
$router[] = new Route('balicek/<id>', array(
'id' => array(
Route::FILTER_IN => function ($id) {
if(is_numeric($id)) {
return $id;
} else {
return \Packages::getPackageIdByUrl($id);
}
},
Route::FILTER_OUT => function ($id) {
if(!is_numeric($id)) {
return $id;
} else {
return \Packages::getPackageUrlById($id);
}
}
),
'presenter' => 'Package',
'module' => 'Front',
'action' => 'default'
));
?>
DB funkce jsou jednoduché:
<?php
public static function getPackageUrlById($id) {
return dibi::select("url")->from("packages")->where("id = %i", $id)->fetchSingle();
}
public static function getPackageIdByUrl($id) {
return dibi::select("id")->from("packages")->where("url = %s", $id)->fetchSingle();
}
?>
Pokud najedu na odkaz, tak mi firefox vypíše správnou adresu v náhledu
adres odkazu, tzn. balicek/nazev-balicku . Problém je, že mě na tento
balíček nepřesměruje, ale přesměruje mě na jiný balíček z databáze.
A vždy na ten stejný. Pokud je hodnota názvu adresy (url) v db prázdná,
normálně zobrazí balíček jaký má v „nepěkném formátu“. Pokud ale
název vyplním, tak vždy přesměrovává na stejný balíček.
Nevíte někdo kde by mohl být problém? Ležím v tom týden a nevím jak
dál.
Díky za případnou odpověď.
- mauricio
- Člen | 6
Ahoj,
tak lousknout se mi to ještě nepodařilo, ale vypozoroval jsem další
chování:
Zadám do funkcí hodnotu natvrdo:
<?php
public static function getPackageUrlById($id) {
return dibi::select("url")->from("packages")->where("id = 1")->fetchSingle();
}
public static function getPackageIdByUrl($id) {
return dibi::select("id")->from("packages")->where("url = 'abc'")->fetchSingle();
}
?>
V tomto případě se chová správně – po kliku na jakýkoliv balíček
zobrazí balíček s touto url:
nazev_webu/balicek/abc
Vrátím zpět funkce na výběr z db podle parametru. Nyní, se mi každý
balíček, který má v DB vyplněnou url zobrazí jako:
nazev_webu/balicek/abc
Pokud zadám natvrdo např. id=2 a url=‚cde‘, zobrazuje se zase každý
balíček s vyplněným sloupcem url jako:
nazev_webu/balicek/cde
Tzn někde tam zůstává ta hodnota a nevím kde. Nemáte někdo tucha čím by to mohlo být? Odkazy balíčků jsou vytvořené správně:
<?php
<a href="{plink Package:default, $p->id}" title="{$p->name}">{$p->name}</a>
?>
Není to někde v nastavení Nette/Apache/PHP/…?
- mauricio
- Člen | 6
Tak když si dám vypsat id, které je v routě:
<?php
$router[] = new Route('balicek/<id>', array(
'id' => array(
Route::FILTER_IN => function($id) {
Debugger::fireLog($id);
if(is_numeric($id)) {
return $id;
} else {
return \Packages::getPackageIdByUrl($id);
}
},
Route::FILTER_OUT => function ($id) {
Debugger::fireLog($id);
if(!is_numeric($id)) {
return $id;
} else {
return \Packages::getPackageUrlById($id);
}
}
),
'presenter' => 'Package',
'module' => 'Front',
'action' => 'default'
));
?>
Tak je $id vždy rovno stejné hodnotě (u balíčků, které mají vyplněn
sloupec url). Takže u těchto balíčků se do routy dostává vždy stejná
hodnota.
Nevíte někdo proč? Odkud se vlastně bere to $id?