routování vždy přesměruje na stejnou stránku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mauricio
Člen | 6
+
0
-

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
+
0
-

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
+
0
-

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?

Tabetha
Člen | 140
+
0
-

a je jasne, ze v tom vytvarani linku v sablone nie je stale ta ista hodnota?

mauricio
Člen | 6
+
0
-

Právě že není.
Mám zobrazené balíčky i s jejich id a ty jsou správně.

mauricio
Člen | 6
+
0
-

Tak vyřešeno.
Spravilo to vyčištění internetové cache. Asi tam byl nějakej bordel a prostě se tam držela pořád stejná hodnota. Teď vše funguje jak má. Mazal sem cookiny a to nepomohlo, chtělo to kompletní čistku.